Tag:

切片的最后一个元素

什么是提取slice的最后一个元素的方法? var slice []int slice = append(slice, 2) slice = append(slice, 7) slice[len(slice)-1:][0] // Retrieves the last element 上面的解决scheme工作,但似乎尴尬。

在Go中没有检测

我看到很多代码在检测零,如下所示: if err != nil { // handle the error } 不过,我有这样的结构: type Config struct { host string port float64 } config是Config的一个实例,当我这样做的时候: if config == nil { } 有编译错误,说:不能将nil转换成typesconfiguration

如何获取string中的字符数?

如何获得Go中string的字符数? 例如,如果我有一个string"hello"该方法应该返回5 。 我看到, len(str)返回字节数, 而不是字符数,所以len("£")返回2而不是1,因为£是用UTF-8中的两个字节编码的。

在Go中redirectsubprocess的stdoutpipe道

我正在用Go编写一个程序,执行一个像程序一样的服务器(也是Go)。 现在我想要在terminal窗口中开始父程序的子程序的标准输出。 一种方法是使用cmd.Output()函数,但是只有在进程退出后才会打印stdout。 (这是一个问题,因为这个类似于服务器的程序运行很长时间,我想读取日志输出) variablesout是type io.ReadCloser ,我不知道该怎么做才能完成我的任务,在这个主题上我找不到有用的东西。 func main() { cmd := exec.Command("/path/to/my/child/program") out, err := cmd.StdoutPipe() if err != nil { fmt.Println(err) } err = cmd.Start() if err != nil { fmt.Println(err) } //fmt.Println(out) cmd.Wait() } 解释代码:取消注释Println函数来获取代码进行编译,我知道Println(out io.ReadCloser)不是一个有意义的函数。 (它产生输出&{3 |0 <nil> 0} )这两行只是需要编译代码。

如何使用Go漂亮地打印JSON?

有没有人知道一个简单的方法来打印JSON输出? 股票http://golang.org/pkg/encoding/json/包似乎并没有包括这个function (编辑:它,看到接受的答案),并迅速谷歌没有什么明显的东西。 我正在寻找的使用都是漂亮的 – 打印json.Marshal的结果,只是从任何地方格式化JSONstring,所以更容易阅读debugging目的。

在Go中堆栈vs堆结构的分配,以及它们如何与垃圾收集相关联

我是Go的新手,我正在体验C风格的基于堆栈的编程,即自动variables存在于堆栈中,分配的内存驻留在堆栈上,以及Python风格的基于堆栈的编程只有堆栈上的东西是引用/指向堆上的对象的指针。 据我所知,以下两个函数给出了相同的输出: func myFunction() (*MyStructType, error) { var chunk *MyStructType = new(HeaderChunk) … return chunk, nil } func myFunction() (*MyStructType, error) { var chunk MyStructType … return &chunk, nil } 即分配一个新的结构并返回它。 如果我用C编写的话,第一个会把一个对象放在堆上,第二个放在堆栈上。 第一个会返回一个指向堆的指针,第二个会返回一个指向堆栈的指针,这个指针在函数返回的时候会蒸发掉,这将是一件坏事。 如果我用Python(或除C#之外的其他许多现代语言)编写它,则示例2将不可能。 我得到的垃圾收集这两个值,所以上述两种forms都很好。 去引用: 请注意,与C不同的是,返回局部variables的地址是完全正确的。 与该variables相关的存储在函数返回后仍然存在。 实际上,每一次复合文本的地址分配一个新的实例,所以我们可以结合这两行。 http://golang.org/doc/effective_go.html#functions 但是它提出了一些问题。 1 – 在示例1中,结构在堆中声明。 例2呢? 这是在堆栈中以同样的方式在C中声明,还是在堆上呢? 2 – 如果在堆栈中声明了示例2,函数返回后如何保持可用状态? 3 – 如果实例2实际上是在堆中声明的,它是如何通过值而不是通过引用传递的? 这种情况下的指针是什么?

为什么Go很慢(与Java相比)?

正如我们从计算机语言基准游戏中可以看到的那样 : Go平均比C慢10倍 Go比Java慢三倍? 这怎么可能,记住Go编译器生成本地代码执行? Go不成熟的编译器? 或者Go语言有一些固有的问题? 编辑: 大多数答案都否定了Go语言的内在缓慢,声称这个问题存在于不成熟的编译器中。 因此,我已经做了一些自己的testing来计算斐波纳契数字 :迭代algorithm在Go(freebsd,6g)中以与C中same速度运行(使用O3选项)。 慢的recursion运行在Go中,比在C中慢2 times (使用-O3选项;使用-O0 – 相同)。 但是我还没有看到在基准游戏中的10倍跌幅。

如何在Go中的POST请求中发送JSONstring

我试着与Apiary合作,并制作了一个通用模板来发送JSON模拟服务器,并有这样的代码: package main import ( "encoding/json" "fmt" "github.com/jmcvetta/napping" "log" "net/http" ) func main() { url := "http://restapi3.apiary.io/notes" fmt.Println("URL:>", url) s := napping.Session{} h := &http.Header{} h.Set("X-Custom-Header", "myvalue") s.Header = h var jsonStr = []byte(` { "title": "Buy cheese and bread for breakfast." }`) var data map[string]json.RawMessage err := json.Unmarshal(jsonStr, &data) if err != nil { […]

交叉编译去OSX上?

我正在尝试在OSX上交叉编译一个应用程序来为Windows和Linux构build二进制文件。 我已经阅读了所有我能在网上find的东西。 我发现的最近的一个例子已经发表(除了很多未完成的讨论外,我还发现了这个问题): http://solovyov.net/en/2012/03/09/cross-compiling-go/ 但它不适用于我的安装。 我已经去了1.0.2。 由于1.0.2是相当新近的,在我看来,以上所有的例子不适用于这个版本。 试图做./make.bash –no-clean与ENVvariables设置为386 /窗口,它确实build立去,但它build立去我的安装,这是darwin/amd64 ,完全忽略了什么设置在ENV,假设build立不同的编译器 任何build议如何做(如果可以完成的话)?

在Go中testing空string的最佳方法是什么?

testing非空string(在Go中)哪种方法是最好的(更具有习惯性)? if len(mystring) > 0 { } 要么: if mystring != "" { } 或者是其他东西?