Questions tagged «go»

Go是一种开源编程语言。它是静态类型的,具有从C松散派生的语法,添加了自动内存管理,类型安全性,一些动态类型输入功能,其他内置类型,例如可变长度数组(称为slices)和键值映射,以及大型标准库。

4
将go文件导入同一文件夹
我在将本地go文件导入另一个go文件时遇到困难。 我的项目结构如下图所示 -samplego --pkg --src ---github.com ----xxxx -----a.go -----b.go --bin 我正在尝试在b.go中导入a.go。我尝试了以下方法 import "a" import "github.com/xxxx/a" 这些都不起作用。.我知道我必须介入GOPATH,但我做对了。目前我的GOPATH指向samplego(/ workspace / samplego)。我得到以下错误 cannot find package "a" in any of: /usr/local/go/src/pkg/a (from $GOROOT) /workspace/samplego/src/a (from $GOPATH) 另外,将这些源文件导入另一个项目/模块时,GOPATH如何工作?那么当地的进口会成为问题吗?在这种情况下,最佳做法是什么-模块中是否只有一个go文件(带有相关测试)?
84 import  path  go 

5
如何打印Go对象的指针值?指针值是什么意思?
我只是在玩Go,还没有关于何时按值或按引用传递结构的良好心理模型。 这可能是一个非常愚蠢的问题,但我只想尝试一下,看看我是否仍在处理同一对象,或者是否已对其进行了复制(按值传递)。 有没有一种方法可以打印对象的指针(如果gc更改了指针值,则为内部ID)? package main import ( "runtime" ) type Something struct { number int queue chan int } func gotest( s *Something, done chan bool ) { println( "from gotest:") println( &s ) for num := range s.queue { println( num ) s.number = num } done <- true …
83 go 

7
Go语言的赋值运算符
最近我在玩Google的新编程语言Go 并且想知道为什么赋值运算符为什么在:=等号前面有一个冒号= ?语言的作者为什么要使用name := "John"而不是name = "John"
83 syntax  go 

4
如何在Golang中将类型从字符串转换为float64解码JSON?
我需要使用浮点数解码JSON字符串,例如: {"name":"Galaxy Nexus", "price":"3460.00"} 我使用下面的Golang代码: package main import ( "encoding/json" "fmt" ) type Product struct { Name string Price float64 } func main() { s := `{"name":"Galaxy Nexus", "price":"3460.00"}` var pro Product err := json.Unmarshal([]byte(s), &pro) if err == nil { fmt.Printf("%+v\n", pro) } else { fmt.Println(err) fmt.Printf("%+v\n", pro) } …
83 json  go 

2
如何在Go中发送POST请求?
我正在尝试发出POST请求,但无法完成。另一端什么也没有收到。 这是应该如何工作的吗?我知道该PostForm功能,但我认为我无法使用它,因为无法使用进行测试httputil,对吗? hc := http.Client{} req, err := http.NewRequest("POST", APIURL, nil) form := url.Values{} form.Add("ln", c.ln) form.Add("ip", c.ip) form.Add("ua", c.ua) req.PostForm = form req.Header.Add("Content-Type", "application/x-www-form-urlencoded") glog.Info("form was %v", form) resp, err := hc.Do(req)
83 go 

1
Go未链接我的程序集:未定义的外部函数
我试图写一些SIMD主要用于学习目的。我知道Go可以链接程序集,但是我无法使其正常工作。 这是我可以做的最简单的示例(逐元素矢量乘法): vec_amd64.s(注意:实际文件下面有一个空格行,RET因为否则会导致错误) // func mul(v1, v2 Vec4) Vec4 TEXT .mul(SB),4,$0-48 MOVUPS v1+0(FP), X0 MOVUPS v2+16(FP), X1 MULPS X1, X0 // also tried ret+32 since I've seen some places do that MOVUPS X0, toReturn+32(FP) RET vec.go package simd type Vec4 [4]float32 func (v1 Vec4) Mul(v2 Vec4) Vec4 { return Vec4{v1[0] …
82 assembly  go 

12
如何减少编译文件的大小?
让我们比较一下c:Hello_world.c: #include<stdio.h> int main(){ printf("Hello world!"); } Hello_world.go: package main import "fmt" func main(){ fmt.Printf("Hello world!") } 都编译: $gcc Hello_world.c -o Hello_c $8g Hello_world.go -o Hello_go.8 $8l Hello_go.8 -o Hello_go 还有,这是什么? $ls -ls ... 5,4K 2010-10-05 11:09 Hello_c ... 991K 2010-10-05 11:17 Hello_go 大约1Mb的世界。你在跟我开玩笑吗?我做错了什么? (仅Hello_go-> 893K条)
82 go 

7
为什么Go中不经常使用列表?
我是Go的新手,对此感到很兴奋。但是,在我广泛使用的所有语言中:Delphi,C#,C ++,Python-列表非常重要,因为列表可以动态调整大小,而不是数组。 在Golang中,确实存在一个list.List结构,但是我很少看到有关它的文档-无论是在Go By Example还是我所拥有的三本Go书籍中,Summerfield,Chisnal和Balbaert都花了大量时间在数组和切片上,然后跳到地图。在源代码示例中,我也很少或根本没有使用list.List。 看来,与Python不同,RangeList不支持Python,这是IMO的一大缺陷。我想念什么吗? 切片当然不错,但是它们仍然需要基于具有硬编码大小的数组。这就是List出现的地方。有没有一种方法可以在Go中创建数组/切片,而无需使用硬编码的数组大小?为什么列表被忽略?
82 arrays  list  go 

5
在一个通道上监听多个goroutine
我有多个goroutine试图同时在同一频道上接收。似乎最后一个在通道上开始接收的goroutine获得了值。这是语言规范中的某个地方还是未定义的行为? c := make(chan string) for i := 0; i < 5; i++ { go func(i int) { <-c c <- fmt.Sprintf("goroutine %d", i) }(i) } c <- "hi" fmt.Println(<-c) 输出: goroutine 4 操场上的例子 编辑: 我只是意识到它比我想的还要复杂。该消息在所有goroutine中传递。 c := make(chan string) for i := 0; i < 5; i++ { go …
82 go 

3
通道缓冲区大小是多少?
我正在尝试创建一个异步通道,并且一直在查看http://golang.org/ref/spec#Making_slices_maps_and_channels。 c := make(chan int, 10) // channel with a buffer size of 10 缓冲区大小为10是什么意思?缓冲区大小具体代表/限制了什么?
82 go  channel 


8
在Go中随机播放数组
我试图将以下Python代码翻译为Go import random list = [i for i in range(1, 25)] random.shuffle(list) print(list) 但是我发现Go版本冗长而笨拙,因为没有shuffle函数,我不得不实现接口和转换类型。 什么是我的代码的惯用Go版本?
82 arrays  go 

9
在Golang中重用HTTP连接
我目前正在努力寻找一种在Golang中进行HTTP发布时重用连接的方法。 我已经创建了一个运输和客户,如下所示: // Create a new transport and HTTP client tr := &http.Transport{} client := &http.Client{Transport: tr} 然后,我将此客户端指针传递到goroutine中,该例程将多个帖子发布到同一个端点,如下所示: r, err := client.Post(url, "application/json", post) 从netstat来看,这似乎导致每个帖子都有一个新的连接,从而导致大量并发连接被打开。 在这种情况下,重用连接的正确方法是什么?
81 go 

3
go get和go install有什么区别?
使用该go工具一段时间后,它看起来像go get: (可选)下载, 编译, 并安装 一个软件,而go install仅仅是 编译 并安装 它。在这种情况下,为什么该go install命令go get被取代而存在?
81 go 

4
如何在Go中安装要求?“找不到包裹”
我是Go的新手,我正在尝试以最少的文档建立一个Go项目:https : //github.com/alphagov/metadata-api 我已经克隆了它,但是当我尝试时go build,收到以下警告: main.go:8:2: cannot find package "github.com/Sirupsen/logrus" in any of: /usr/local/Cellar/go/1.3.3/libexec/src/pkg/github.com/Sirupsen/logrus (from $GOROOT) /Users/me/go/src/github.com/Sirupsen/logrus (from $GOPATH) main.go:14:2: cannot find package "github.com/alphagov/metadata-api/content_api" in any of: /usr/local/Cellar/go/1.3.3/libexec/src/pkg/github.com/alphagov/metadata-api/content_api (from $GOROOT) /Users/me/go/src/github.com/alphagov/metadata-api/content_api (from $GOPATH) 我猜这是因为我没有安装Go的等效要求? 我的GOPATH位置: metadata-api$ echo $GOPATH /Users/me/go Go可执行文件位于 metadata-ape$ echo $PATH ....:/Users/me/go/bin 我需要做什么来帮助Go查找这些软件包?
81 go 

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.