Go语言中文网 为您找到相关结果 417

Go与GUI——GO语言的图形界面Walk

GO没有原生的界面库,所以不能直接用来写GUI界面。但最近互联网上已经涌现出不少成熟、好用的第三方界面库。使用它们,就同样可以写出同C#、C++的界面。而且效率还更胜一筹。 关于Walk界面库(官方介绍): Walk是一个写给Golang的Window应用程序库套件,它主要用于桌面GUI的开发,但也有更多的东西。 Part One:安装Walk 在浏览这部分前,请确定已经配置安装完毕go语言的环境。如果没有,可以参考go官网的Install帮助。另外,注意:这个Walk库只能运行在Go 1.1.x及以上。 要安装Walk很简单,只要运行命令:go get github.com/lxn/walk 等待命令执行完毕,这时候检查GOPATH的src与pkg下,是否有符合自己计算机环境的walk目录...阅读全文

go语言选择语句 switch case

根据传入条件的不同,选择语句会执行不同的语句。下面的例子根据传入的整型变量i的不同而打印不同的内容: switch i { case 0: fmt.Printf("0") case 1: fmt.Printf("1") case 2: fallthrough case 3: fmt.Printf("3") case 4, 5, 6: fmt.Printf("4, 5, 6") default: fmt.Printf("Default") } 运行上面的案例,将会得到如下结果:  i = 0时,输出0;  i = 1时,输出1;  i = 2时,输出3;  i = 3时,输出3;  i = 4时,输出4, 5, 6;  i = 5时,输出4, 5, 6;  i = 6时,输出4,...阅读全文

博文 2015-07-29 03:00:01 osfipin

go build和go install的区别

go build通过go build加上要编译的Go源文件名,我们即可得到一个可执行文件,默认情况下这个文件的名字为源文件名字去掉.go后缀。 $ go build hello.go $ lshello hello.go 当然我们也 可以通过-o选项来指定其他名字: $ go build -o mygo hello.go $ lsmygo hello.go 如果我们在go-examples目录下直接执行go build命令,后面不带文件名,我们将得到一个与目录名同名的可执行文件: $ go build $ lsgo-examples hello.go go install与build命令相比,install命令在编译源码后还会将可执行文件或库文件安装到约定的目录下。 go install编译...阅读全文

go语言:flag的使用

go语言flag的使用 package main import ( "flag" "fmt" ) var music_file *string = flag.String("file", "musicfile", "Use -file ") func main() { flag.Parse() fmt.Println(*music_file) } 例如文件为flagTest.go go run flagTest.go -file "../music/sun.mp3" 即可指定file参数的值。 如果直接使用go run flagTest.go -file则会提示你-file的使用说明.-file="musicfile": Use -file 如...阅读全文

博文 2014-10-21 23:00:00 x369201170

golang 速度限制,time.Tick(time.Second*2) channel,隔2秒后继续执行

package main import ( "fmt" "time" ) func main() { requests := make(chan int, 5) for i := 1; i <= 2; i++ { requests <- i } close(requests) limiter := time.Tick(time.Millisecond * 200) for req := range requests { //会循环两次,前面往requests channel中发送了两个值 <-limiter //执行到这里,需要隔 200毫秒才继续往下执行,time.Tick(timer)上面已定义 fmt.Println("request", req, time.Now()) } burs...阅读全文

博文 2015-04-18 03:00:00 benlightning

Ubuntu 14.04下安装Golang以及LiteIDE

安装配置Golang 可以从Golang中国这里下载,下载好后使用sudo tar -xvzf ~/Downloads/go*.linux-amd64.tar.gz -C /usr/local/命令将其解压到/usr/local/位置,然后配置环境变量。 使用命令vim ~/.bashrc打开.bashrc文件,然后在最后追加下面内容: export GOROOT=/usr/local/go export PATH=$PATH:$GOROOT/bin export GOPATH=~/Go 然后使用命令source ~/.bashrc使其生效,需要注意的是,GOPATH这个环境变量指的是之后需要存放源码的目录,我使用的是~/Go目录 使用go version以及go env等命令来查看是否正确...阅读全文

Go 解决"Connection reset by peer"或"EOF"问题

【问题】 我编写了一个http Client程序代码如下: // create a request req, err := http.NewRequest(method, url, body) if err != nil { return nil, err } // send JSON to firebase resp, err := http.DefaultClient.Do(req) if err != nil { return nil, err } if resp.StatusCode != http.StatusOK { return nil, fmt.Errorf("Bad HTTP Response: %v", resp.Status) } defer resp.Body.Clo...阅读全文

博文 2016-12-19 14:00:02 吃一堑消化不良

配置 VIM 的 Go 语言开发环境

本文是针对像我这样的 VIM 小白而写的,所使用的 VIM-GO 插件虽然步骤简单但不够详细,特写此文以做记录和分享。欢迎各位大神纠正补充! 特别说明 本博文不是 Go 语言环境搭建教程,只是 VIM 插件部分的配置教程。如果需要了解如何下载及安装 Go 语言,请移步 配置 Go 语言开发环境的前半部分。 VIM 插件地址:github.com/fatih/vim-go 为了方便墙内用户,本博文所有要下载的 ZIP 包已经直接打包好:下载地址 安装 Pathogen Pathogen 是 VIM 的一个插件管理器,很多插件都支持它,所以不要怕麻烦,因为安装它的步骤非常简单。 前往 Pathogen 首页,找到下方的最新版 Package ZIP 包下载链接。 下载解压后你会得到一个名称为 a...阅读全文

博文 2015-06-12 03:00:00 davygeek

go语言Notepad++简易开发环境搭建(windows)

1.下载安装go语言:https://golang.org/dl/选择对应的平台,建议使用msi安装包,这个会帮你配置好环境变量(也许需要重启)对应的环境变量有: GOROOT - C:\Go\PATH - ;C:\Go\bin 2.安装Notepad++不多说了 3.notepad++安装插件:GOnpp 运行后右侧会显示运行结果 4.语法高亮(1)下载notepad++的go语言支持包(http://notepad-plus.sourceforge.net/commun/userDefinedLang/go.zip)(2)解压go.zip,得到:userDefineLang_Go.xml go.xml(3)打开userDefineLang_Go.xml文件,去掉文件 第一行和最后一行的注...阅读全文

博文 2015-02-12 03:00:00 solohac

Golang测试包小结

Golang测试包 golang自带了测试包(testing),直接可以进行单元测试、性能分析、输出结果验证等。简单看着官方文档试了试,总结一下: 目录结构和命令 使用golang的测试包,需要遵循简单的目录结构 测试代码放在待测试代码的目录下(一个包内),以_test.go结尾,例如如下目录结构,MyTest目录下有待测试的代码文件MyTest.go和测试代码MyTest_test.go . |-- bin | `-- main |-- pkg | `-- darwin_amd64 | `-- MyTest.a `-- src |-- MyTest | |-- MyTest.go | `-- MyTest_test.go `-- main `-- main.go 直接在MyTest目录下执...阅读全文

博文 2015-03-03 03:00:01 numbersix

Golang lint简易使用方法

根据作者的说法: Golint is a linter for Go source code. Golint differs from gofmt. Gofmt reformats Go source code, whereas golint prints out style mistakes. Golint differs from govet. Govet is concerned with correctness, whereas golint is concerned with coding style. Golint is in use at Google, and it seeks to match the accepted style of the open source Go...阅读全文

博文 2015-05-12 20:00:06 dandan.fs

golang log用法

21天精品区块链课程免费学习,深入实战行家带路,助力开发者轻松玩转区块链! >>> package main import ( "log" "os" ) var logger *log.Logger func main() { file, err := os.OpenFile("test.log", os.O_APPEND|os.O_CREATE, 666) if err != nil { log.Fatalln("fail to create test.log file!") } defer file.Close() logger = log.New(file, "", log.LstdFlags|log.Lshortfile) // 日志文件格式:log包含时间及文件行数 log.Pri...阅读全文

博文 2018-09-01 14:33:12 Robin3D

os.Args[0] 的获取的值的问题

默认情况下 os.Args[0]应该返回可执行文件的路径 ``` go package main import ( "fmt" "os" ) func main() { fmt.Println("test the os package") fmt.Println("Args len", len(os.Args)) for i, arg := range os.Args { fmt.Println("arg", i) fmt.Println("arg", arg) } fileInfo, err := os.Stat("E:\\go\\bin\\studygolang.exe") if err != nil { f...阅读全文

go语言:sync.Once的用法

sync.Once.Do(f func())是一个挺有趣的东西,能保证once只执行一次,无论你是否更换once.Do(xx)这里的方法,这个sync.Once块只会执行一次。 package main import ( "fmt" "sync" "time" ) var once sync.Once func main() { for i, v := range make([]string, 10) { once.Do(onces) fmt.Println("count:", v, "---", i) } for i := 0; i < 10; i++ { go func() { once.Do(onced) fmt.Println("213") }() } time.Sleep(4000...阅读全文

博文 2016-01-05 19:00:00 x369201170

[Go]Log记录

后端系统中的Log是相当重要的,做过高并发服务的同学都会认同这一点。相对而言,调试已经用处不大了,对于这样的项目,我现在也习惯了这种开发方式,有两个原因:1.debug只能在开发环境,到产线环境就不灵了。2.在并行计算下,debug可能无法发现潜在的问题。 有了以前做node.js的经验,放弃debug没有想象中那么可怕,只要我们程序设计合理,结构清晰,日志完整,看到异常信息后基本都可以快速定位问题所在。 做Java的时候有log4j,做.NET程序的时候有log4net, 做Node.js的时候有log4js....上述几个模块用了都不错,因此做Go项目自然选择了Log4go。 话说这个log4go并不完善,而且两年没维护了,白瞎了这么好的名字。比较严重的是程序退出可能有日志没有flush...阅读全文

博文 2014-11-11 17:00:01 abv123456789

golang for android

go是一种简洁高效的语言,go 1.4版本支持在android上运行 go get golang.org/x/mobile go get golang.org/x/mobile/example 运行示例代码,路径为$GOPATH/src/golang.org/x/mobile/example/libhello 运行all.bash编译并打包安装 如果报错: go build runtime: android/arm must be bootstrapped using make.bash 则说明没有编译arm版本的go,需要进到$GOROOT/src下面编译android/arm版本 #拣出一套交叉编译工具 $NDK_ROOT/build/tools/make-standalone-tool...阅读全文

博文 2014-12-18 16:00:06 开开904

Go 获取当前可执行文件的所在目录

代码如下: import ( "errors" "os" "os/exec" "path/filepath" "strings" ) func GetCurrentPath() (string, error) { file, err := exec.LookPath(os.Args[0]) if err != nil { return "", err } path, err := filepath.Abs(file) if err != nil { return "", err } i := strings.LastIndex(path, "/") if i < 0 { i = strings.LastIndex(path, "\\") } if i < 0 { return "", err...阅读全文

博文 2017-02-13 04:00:26 风华神使

对golang的Channel初始化的有缓存与无缓存解释

首先编程的时候遇到疑问,输出跟我所想预想不一样,后来查到了golang社区的帖子,其中一篇帖子 :健哥大人 做出了一些解释。 我摘抄重点过来: 无缓冲的与有缓冲channel有着重大差别,那就是一个是同步的 一个是非同步的。 比如 c1:=make(chan int) 无缓冲 c2:=make(chan int,1) 有缓冲 c1<-1 无缓冲: 不仅仅是向 c1 通道放 1,而是一直要等有别的携程 <-c1 接手了这个参数,那么c1<-1才会继续下去,要不然就一直阻塞着。 有缓冲: c2<-1 则不会阻塞,因为缓冲大小是1(其实是缓冲大小为0),只有当放第二个值的时候,第一个还没被人拿走,这时候才会阻塞。 我对以上做一些解释,首先确实得承认channel有缓存与无缓存确实差别巨大,缓存为1...阅读全文

博文 2015-06-17 20:05:13 paladinosment

mac下使用brew安装并使用golang

突然想进go坑,然后就尝试在公司新发的mac上折腾下 安装 通过执行命令 brew search go 看到可用最新版是1.7,就他了 brew install go@1.7 安装好了,按网上的教程 直接在终端里执行 go,结果提示命令不存在 Orz。好吧,自己加个别名吧。 打开 .bash_profile,添加: alias go=’/usr/local/Cellar/go\@1.7/1.7.6/bin/go’ 执行 source .bash_profile,然后再执行 go。一切正常~ 按照教程,然后继续在 .bash_profile 中设置几个环境变量: export GOROOT=/usr/local/opt/go\@1.7/bin/ export GOPATH=~/code/gol...阅读全文

博文 2017-07-01 16:00:16 nicochen

关于golang里停止程序执行与变量打印

1)golang里有没有停止程序执行的语句,类似于php里的die和exit. 2)在beego里,如何直接打印变量输出到浏览器里,而不需要渲染到模板里,类似于php里的 echo $a; die; 如果使用fmt.Printf(),需要在后台进行查看了。 有没有更直接的方法,刚接触学习,需要进行各种调试,来了解它的执行过程和原理, ...阅读全文

golang轮询机制select的理解

func main() { c := make(chan int) quit := make(chan int) go func() { for i := 0; i < 10; i++ { fmt.Println(<-c) } quit <- 0 }() fibonacci(c, quit) } //select的轮询机制 func fibonacci(c chan int, quit chan int) { x, y := 0, 1 for { select { // select轮询机制 case c <- x: x, y = y, x+y case <-quit: fmt.Println("quit") return } } } main中执行fibonacci函数时候,select有...阅读全文

博文 2015-07-24 16:00:01 webyh

聊聊GOPATH、GOROOT

在go语言中环境变量GOPATH和GOROOT需要设置好才可进行开发编译,学过JAVA的朋友理解起来就比较快,这里就这两个变量作个详细的说明,不足之处,请大家批评指正。1. GOROOT简而言之,GOROOT在GO语言中表示的是go语言编译、工具、标准库等的安装路径,在Linux系统中一般安装在/usr/go或者/usr/local/go,这样Linux系统中的PATH变量一般都包含了这两个目录,所以就可以直接运行go命令,而Windows系统中一般默认安装在C:\go中。如果自定义安装go的话,需要设置GOROOT的值,比如在Linux系统中用户如有root用户权限时,想安装go至自己的工作目录中,就要设置GOROOT为自己的HOME目录中,假设安装在/home/目录中的go目录,则需要这...阅读全文

博文 2017-07-02 03:12:12 jasonvfang

一个轻量级的分布式定时任务调度平台-Cloudtask

什么是Cloudtask? Cloudtask 是一个轻量级的分布式定时任务管理平台,它非常轻量小巧,使用简单,我们可以上传、暂停/启动任务,克隆一个任务,修改任务的执行命令,或者查看任务的调度状态、执行日志,开发人员可以采用自己最熟悉的编程语言来编写任务程序,可以是一个控制台程序,也可以是一段 shell 脚本,上传至平台后设置定时执行规则即可。 设计方案 Cloudtask 后端为无状态服务,通过 Zookeeper 实现集群各节点间的发现与协调,节点以心跳方式注册到注册中心,中心服务器统一管理着所有集群,任务调度以集群方式进行分配,具有良好的可扩展性,任务分配信息按集群划分并将分配数据存储到 Zookeeper 节点,保持分配数据的一致性。 更多文档 https://cloudtask...阅读全文

golang在当前执行目录创建日志文件

package main import ( "bufio" "log" "os" "os/exec" "path/filepath" "strings" "time" ) /*获取当前文件执行的路径*/ func GetCurrPath() string { file, _ := exec.LookPath(os.Args[0]) path, _ := filepath.Abs(file) splitstring := strings.Split(path, "\\") size := len(splitstring) splitstring = strings.Split(path, splitstring[size-1]) ret := strings.Replace(splitstri...阅读全文

博文 2014-10-04 19:27:13 xlplbo

Go语言执行效率

今天我用Qt和Golang写了一段代码用来对比它们的执行效率,代码很简单,就是求1到1000000000000的和,如下: Qt代码: ```c QElapsedTimer et; et.start(); long sum = 0; for(long i = 0; i < 1000000000000; ++i) { sum += i; } qDebug() << Q_FUNC_INFO << "Elapsed:" << et.elapsed(); qDebug() << Q_FUNC_INFO << "sum =" << sum; ``` Golang代码: ```go...阅读全文

如何运行一个golang程序为守护进程

http://www.hiceon.com/topic/how-to-start-a-golang-program-as-a-daemon/ 安装daemonize 安装git环境 yum install git -y 获取daemonize git clone git://github.com/bmc/daemonize.git 安装daemonize cd daemonize./configuremake && make install 查看是否安装 daemonize -v 通过daemonize执行golang守护进程 你需要打包你的golang程序为可执行文件(go build),并通过daemonize来执行它来实现守护进程,如: daemonize -p /var/run/my...阅读全文

博文 2015-09-13 14:00:30 leonpengweicn

调用其它程序并得到程序输出(go和python)

在c语言中可以用system函数调用系统命令并得到输出,通过输出重定向也可以将程序执行的输出保存到文件以供使用,但用起来不是很方便。我这里介绍下用python和go语言的实现方式,可以将其它程序的输出直接保存成变量供程序使用。 下面的示例用的是ls命名,需要安装MinGW,并将“C:\MinGW\msys\1.0\bin”加入环境变量。 一、用python调用其它程序,并得到输出 示例代码: import osvar = os.popen('ls -l').read()print var 运行效果(以我机器为例): 二、用go语言调用其它程序,并得到输出 go代码: package mainimport ( "exec" // "os/exec" in go1 "fmt")func main...阅读全文

GoLang中flag标签使用

正如其他语言一样,在 linux 系统上通过传入不同的参数来使得代码执行不同逻辑实现不同功能,这样的优点就是执行想要的既定逻辑而不需要修改代码重新编译与打包。在 Golang 语言中也为我们提供了相应的功能,直接上代码,在代码中会做详细的解释,当前运行环境为:Go-1.8.1 package main import ( "flag" "log" "os" ) func usage() { log.Fatalf("Usage: myProgram [-s server] [-t isShowTimeStamps] \n") } func printMsg(message string) { log.Printf("Received message is : %s \n", ...阅读全文

博文 2017-09-23 03:30:01 grimm

go 生成的exe不在bin文件夹里

GO项目目录解释 src存放源代码 pkg编译后生成的文件 bin编译后生成的可执行文件 背景 在src目录下,新建文件test.go,编写代码。 控制台执行go build test.go 之后发现: 生成的test.exe并没有在bin生成,而是在与源码test.go同级目录src下生成。 解决 控制台执行go install $(function () { $('pre.prettyprint code').each(function () { var lines = $(this).text().split('\n').length; var $numbering = $('

    ').addClass('pre-numbering').hide(); $(this).addCl...阅读全文

windows下 sublime text2配置gdb 调试golang

1. 下载gdb for windows ,点此下载 2.解压后,将目录添加到环境变量path 3. 安装sublimeGdb, 打开sublime text2 ,ctrl+shift+p, install package,选择sublimeGdb,回车 4.配置setting , 在sublime text2 中,选择菜单 Preferences--Package settings--SublimeGdb--Setting Default ,设置其下两项。workingdir是gopath的工作区,也就是项目exe生成的路径。commandline 最重要是 后面main.exe 替换成你的可执行文件。 // Example: ${folder:/path/to/file} is repl...阅读全文

博文 2014-10-04 19:27:16 阳光灿烂的日子

Golang的交互模式进阶-读取用户的输入

Golang的交互模式进阶-读取用户的输入 作者:尹正杰 版权声明:原创作品,谢绝转载!否则将追究法律责任。 读写数据除了 fmt 和 os 包,我们还需要用到 bufio 包来处理缓冲的输入和输出。 一.从控制台读取输入 我们如何读取用户的键盘(控制台)输入呢?从键盘和标准输入 os.Stdin 读取输入,最简单的办法是使用 fmt 包提供的 Scan 和 Sscan 开头的函数。具体代码如下 1 /* 2 #!/usr/bin/env gorun 3 @author :yinzhengjie 4 Blog:http://www.cnblogs.com/yinzhengjie/tag/GO%E8%AF%AD%E8%A8%80%E7%9A%84%E8%BF%9B%E9%98%B6%E4%B9...阅读全文

博文 2017-11-08 06:00:01 yinzhengjie

问个os.exec 执行windows 下命令的问题

我在windows 目录下面有个cwRsync_5.4.1 的包 path="/cygdrive/c/null/ /cygdrive/c/data/20140101" cmd := exec.Command("cmd", "/C", "C:\\cwRsync_5.4.1\\rsync.exe", "-av", "--delete", path) cmd := exec.Command("C:\\cwRsync_5.4.1\\rsync.exe", "-av", "--delete", path) 都执行无效果。 我拿cmd.Args() 的 里面的参数,在windows 下执行是好的。 另外我也试过了cmd.Start() cmd.Run() 都不可以。。。。...阅读全文

Go 语言切片(Slice)

定义切片 你可以声明一个未指定大小的数组来定义切片: var identifier []type 切片不需要说明长度。 或使用make()函数来创建切片: var slice1 []type = make([]type, len)也可以简写为slice1 := make([]type, len) 也可以指定容量,其中capacity为可选参数。 make([]T, length, capacity) 这里 len 是数组的长度并且也是切片的初始长度。 当leng增长,超出 capacity(容量)是,容量自动会扩大至两倍 空(nil)切片:一个切片在未初始化之前默认为 nil,长度为 0 len() 和 cap() 函数 切片是可索引的,并且可以由 len() 方法获取长度。切片提供了计算容...阅读全文

博文 2015-08-14 15:00:01 直冲

介绍 golang执行系统命令

golang下的os/exec包执行外部命令,它将os.StartProcess进行包装使得它更容易映射到stdin和stdout。这点和python下的command、os.system等功能是一样的。这里列两个具体操作的代码。其可以调用类LINUX系统下的shell命令,也可以在windows下调用cmd下的命令。 代码一 package main import ( "bytes" "fmt" "log" "os/exec" ) const ShellToUse = "bash" func Shellout(command string) (error, string, string) { var stdout bytes.Buffer var stderr bytes.Buffer c...阅读全文

博文 2018-10-28 05:34:39 易霂

go的错误日志

package main import ( "fmt" "log" "os" ) func self_logger(myerr interface{}) { logfile, err := os.OpenFile("d:/golang/log/test.log", os.O_CREATE|os.O_APPEND|os.O_RDWR, 0) if err != nil { fmt.Printf("%s\r\n", err.Error()) os.Exit(-1) } defer logfile.Close() logger := log.New(logfile, "\r\n", log.Ldate|log.Ltime|log.Llongfile) logger.Println(myerr) }...阅读全文

博文 2015-07-24 15:00:05 webyh

golang中开启gctrace

如何开启打印gc信息 只要在程序执行之前加上环境变量GODEBUG gctrace =1 ,如: GODEBUG gctrace =1 ./xxxx.exe or GODEBUG gctrace =1 go run main.go 程序将会显示gc信息,如下 gc 1 @2.104s 0%: 0.018+1.3+0.076 ms clock, 0.054+0.35/1.0/3.0+0.23 ms cpu, 4->4->3 MB, 5 MB goal, 4 P gc 2 @2.241s 0%: 0.019+2.4+0.077 ms clock, 0.079+0/2.4/6.4+0.30 ms cpu, 5->6->5 MB, 6 MB goal, 4 P gc 3 @2.510s 0%: 0....阅读全文

go-if、for、switch、goto、break、continue

if语句: package main import "fmt" func main() { //if后面没有括号 if 1 < 2 { fmt.Println("1<2") } var a = 10 //初始化表达式-a的作用范围只在if语句块 if a := 1; a > 1 { fmt.Println("a > 1") fmt.Println(a) } else { fmt.Println("! a > 1") fmt.Println(a) } fmt.Println(a) } 输出如下: 1<2 ! a > 1 1 10 for语句: package main import "fmt" func main() { //第1种形式无限循环 a := 1 for { a++ if a > ...阅读全文

博文 2016-09-13 08:00:02 u013210620

Go SDK 1.13各项增强简介

本博已经在Go语言将在1.13版本中引入的变化一文中介绍了Go 1.13将对语法和标准库做出的增强。其实, 官方Go SDK 1.13也将带来很多新的变化。本篇文章下面将介绍一下这些变化。 Go SDK 1.13之前,很多可以安全地开辟在栈上的内存因为编译器中的逃逸分析器不够智能的原因而被开辟在了堆上。这在一定程度上影响了程序执行效率。从Go SDK 1.13开始,标准编译器将采用一个新的逃逸分析器,从而将避免很了多不必要的在堆上开辟内存的情况。 Go SDK 1.13之前,所有的defer延迟调用都是记录在堆上的,这严重影响了defer延迟调用的执行效率。从Go SDK 1.13开始,满足某些条件的某些defer延迟调用(标准库中93%的延迟调用满足此条件)将被记录在栈上而不是堆上,从而提...阅读全文

奇闻共赏析::全世界只有我们Erlang程序员是正确的

全世界只有我们Erlang程序员是正确的 http://www.vaikan.com/erlang-solving-the-wrong-problem/ 全世界只有我们是正确的,其他的全错了。我们(Erlang程序员)找到了症结并正确的解决了问题,所有的其他人(非Erlang人)都找错了方向,解决了错误的问题。 全世界其他人想解决的问题是如何让现存的程序能并行执行。2004年之前,摩尔定律一直有效。每年我们的程序执行都会变得更快,我们不需要成为一个优秀的程序员,我们不需要掌握更优化的算法就能让程序一年比一年更快。 芯片越来越大,时钟速度越来越快,程序运行速度越来越快,每年大概以15%幅度的性能提升。 到了2004年,这些现象终止了。芯片已经足够大,时钟的速...阅读全文

golang 编译后文件过大问题处理

go1.9.2出来了,有一个用golang写的工具要编译,正好也测试一下。我是在windows10 64位下测的。编译和执行文件效率都差不多。但是1.9.2编译出来的文件6M。 个人觉得这个有点大了,关键是功能也不复杂。所以觉得这个体积简直太夸张了,试试能否减肥。 使用原始build编译的大小 6,167KB 通过去除部分连接和调试,build部分参数查看结果。 -a 强制编译所有依赖包。 -s 去掉符号信息 -w 去掉DWARF调试信息,得到的程序就不能用gdb调试了 不建议s和w同时使用。 go build -ldflags -w test.go 但是体积还是有点大 4,236KB 最后还只能是加壳压缩。工具地址如下: https://github.com/upx/upx/release...阅读全文

博文 2018-04-25 16:33:06 mickelfeng

Gopher面试中的Coding

从四月份下半月开始,陆陆续续面试了几家公司,都是golang的岗位。每一次面试,侧重点都会有不同,有的会直接给过来一道试题, 然后边解题,边讲述自己的思路,然后面试官根据你的思路和你交流沟通;有的呢,让讲述自己最近做过的项目,遇到的难点, 自己怎么解决的问题思路,而无独有偶的呢,这样的面试中,都要需要展示编码能力。这篇文章就把自己最近面试中遇到的每一个编程问题, 分三步阐述出来:问题描述,解题思路,实际编程。 交替打印数字和字母 问题描述 使用两个 goroutine 交替打印序列,一个 goroutinue 打印数字, 另外一个goroutine打印字母, 最终效果如下 12AB34CD56EF78GH910IJ 。 解题思路 问题很简单,使用 channel 来控制打印的进度。使用两个 ...阅读全文

博文 2017-08-27 16:05:00 brantou

go基本工程构建<一>

1 关于go源代码 每个go源代码都从 package {xxxx 包声明} 开始,表示该go代码属于此包。包是go最基本的分发单位,也是工程管理中依赖关系的体系。 go可执行程序从main包的main函数开始,main函数不带任何参数也无任何返回。 package main import "fmt" // 我们需要使用fmt包中的Println()函数 func main() { fmt.Println("Hello, world. ") } 2 工程文件 go采用目录结构,文件夹来推到工程结构,一般,构建一个工程需三个文件夹 如工程放在目录 /data/pro/demo ├─ ├─ |-- hh.go ├─ ├─demo.go...阅读全文

Golang实现词频统计

本例使用golang实现词频统计。步骤: (1)从文件中读取一篇文章。 (2)统计词频,按单词出现的频率从大到小进行排序。 (3)写入到文件中。 注:任何非英文字母的符号均认为是单词分隔符(即等同于空格)。 效率:使用本程序统计一篇150W单词的文章,大约需要70ms. 1.核心代码: package wordtest import ( "bytes" "fmt" "io/ioutil" "os" "runtime" "sort" "strings" "time" ) //简单的词频统计任务 func CountTestBase(inputFilePath string, outputFilePath string) { //时间开始点 start := time.Now().UnixNan...阅读全文

博文 2015-06-17 20:03:47 books1958