假设我有这些types: type Attribute struct { Key, Val string } type Node struct { Attr []Attribute } 而且我想迭代我的节点的属性来改变它们。 我本来希望能够做到 for _, attr := range n.Attr { if attr.Key == "href" { attr.Val = "something" } } 但attr不是一个指针,这是行不通的,我必须这样做 for i, attr := range n.Attr { if attr.Key == "href" { n.Attr[i].Val = "something" } } 有更简单还是更快的方法? 是否有可能直接从range指针? […]
学习语言的Go代码并不多,而且我确定我不是唯一一个用这个语言进行实验的人。 所以,如果你发现了一些关于该语言的有趣的东西,请在这里发表一个例子。 我也在找 在Go中做事的惯用方式, C / C ++思维“移植”到Go, 语法常见的陷阱, 真的很有意思
我跑去go get package下载一个包之前,得知我需要设置我的GOPATH否则该包GOPATH我的根去安装(我宁愿保持我的安装干净,分离核心从自定义)。 如何删除以前安装的软件包?
我一直在寻找一个Windows编译器golang.org ,但我似乎无法find它。 我只能看到Linux和OS X编译器。 有谁知道Go编程可以在Windows上完成,还是Google还没有实现的东西? 更新:从现在开始(2012年11月), golang.org已经为windows 32 / x86_64提供了正式的二进制版本。
我正在学习Golang,但是我觉得在编译的时候,我不应该留下任何variables或者包没有使用。 这实在让我放慢了脚步。 例如,我只是想声明一个新的包,并计划稍后使用它,或者只是取消注释某些命令来testing。 我总是得到错误,需要评论所有这些用途。 Golang有没有办法避免这种检查?
~/src/go-statsd-client> echo $GOPATH /Users/me/gopath ~/src/go-statsd-client> echo $GOROOT /usr/local/Cellar/go/1.1.1\ ~/src/go-statsd-client> go install go install: no install location for directory /Users/me/src/go-statsd-client outside GOPATH 无论项目是什么结构,总是会失败,并带有相同的信息。 去build设完美的作品。 这是我go env GOARCH="amd64" GOBIN="" GOCHAR="6" GOEXE="" GOHOSTARCH="amd64" GOHOSTOS="darwin" GOOS="darwin" GOPATH="/Users/me/gopath" GORACE="" GOROOT="/usr/local/Cellar/go/1.1.1" GOTOOLDIR="/usr/local/Cellar/go/1.1.1/pkg/tool/darwin_amd64" CC="gcc" GOGCCFLAGS="-g -O2 -fPIC -m64 -pthread -fno-common" CGO_ENABLED="1" 这是在Mac OSX Mountain Lion上,并安装了自制软件。
我正在开发一个API客户端,我需要根据请求对JSON负载进行编码,并从响应中解码JSON主体。 我已经阅读了几个库的源代码,从我所看到的,我基本上有两种编码和解码JSONstring的可能性。 使用json.Unmarshal传递整个响应string data, err := ioutil.ReadAll(resp.Body) if err == nil && data != nil { err = json.Unmarshal(data, value) } 或者使用json.NewDecoder.Decode err = json.NewDecoder(resp.Body).Decode(value) 在我的情况下,当处理实现io.Reader HTTP响应时,第二个版本似乎需要更less的代码,但是因为我已经看到了两者,我想知道是否应该使用解决scheme,而不是使用其他解决scheme。 而且, 从这个问题接受的答案说 请使用json.Decoder代替json.Unmarshal 。 但没有提到原因。 我真的应该避免使用json.Unmarshal ?
我刚刚开始使用Go。 我的代码开始有很多这样的: if err != nil { //handle err } 或这个 if err := rows.Scan(&some_column); err != nil { //handle err } 在Go中有没有一些很好的成语/策略/最佳实践来检查和处理错误? 编辑澄清:我不是肚子疼或者build议Go团队想出更好的东西。 我问我是否做得对,还是错过了社区提出的一些技巧。 谢谢大家。
在Go教程以及我看过的大部分Go代码中,软件包都是这样导入的: import ( "fmt" "os" "launchpad.net/lpad" … ) 但是在http://bazaar.launchpad.net/~niemeyer/lpad/trunk/view/head:/session_test.go,gocheck软件包是导入的. (期): import ( "http" . "launchpad.net/gocheck" "launchpad.net/lpad" "os" ) 有什么意义的. (期)?
看看golang包是如何增长和提高的我想知道包版本的问题是如何解决的? 我看到一种方法是将第三方软件包存储在项目文件夹下。 但是如果我安装它go get ?