Questions tagged «go»

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

10
为什么Go这么慢(与Java相比)?
我们可以从2010年的计算机语言基准游戏中看到: Go平均比C慢10倍 Go比Java慢3倍! 考虑到Go编译器会生成要执行的本机代码,这怎么可能? Go的编译器不成熟?还是Go语言存在一些内在问题? 编辑: 大多数答案都否认Go语言的内在缓慢性,声称问题出在不成熟的编译器中。 因此,我进行了一些自己的测试来计算斐波那契数:迭代算法在Go(freebsd,6g)中以与sameC(带有O3选项)相同的速度运行。迟钝的递归代码在Go中的运行2 times速度比在C语言中运行的慢(使用-O3选项;使用-O0-相同)。但是我还没有看到基准测试中出现10倍的下降。

12
有没有一种用go语言生成UUID的方法
我有看起来像这样的代码: u := make([]byte, 16) _, err := rand.Read(u) if err != nil { return } u[8] = (u[8] | 0x80) & 0xBF // what does this do? u[6] = (u[6] | 0x40) & 0x4F // what does this do? return hex.EncodeToString(u) 它返回一个长度为32的字符串,但是我认为这不是有效的UUID。如果它是真实的UUID,为什么它是UUID,以及修改u[8]and 的值的代码的目的是什么u[6]? 有没有更好的方法来生成UUID?
109 go  uuid 

13
如何使用go get导入特定版本的软件包?
来自一个Node我曾经node_modules通过告诉npm从package.json甚至直接从控制台安装那个版本的lib到我的项目文件夹()中安装供应商lib的特定版本的环境,例如: $ npm install express@4.0.0 然后,我通常使用以下命令在项目中导入该软件包的该版本: var express = require('express'); 现在,我想对做同样的事情go。我怎样才能做到这一点?是否可以安装特定版本的软件包?如果是这样,使用集中式$GOPATH,如何导入一个版本而不是另一个版本? 我会做这样的事情: $ go get github.com/wilk/uuid@0.0.1 $ go get github.com/wilk/uuid@0.0.2 但是,如何在导入过程中有所作为?

13
如何从Golang中的Slice中删除元素
fmt.Println("Enter position to delete::") fmt.Scanln(&pos) new_arr := make([]int, (len(arr) - 1)) k := 0 for i := 0; i < (len(arr) - 1); { if i != pos { new_arr[i] = arr[k] k++ i++ } else { k++ } } for i := 0; i < (len(arr) - 1); i++ …
109 go 

11
出错处理技术[关闭]
已关闭。这个问题是基于观点的。它当前不接受答案。 想改善这个问题吗?更新问题,以便通过编辑此帖子以事实和引用的形式回答。 12个月前关闭。 改善这个问题 我刚开始使用Go。我的代码开始有很多这样的东西: if err != nil { //handle err } 或这个 if err := rows.Scan(&some_column); err != nil { //handle err } 在Go中检查和处理错误是否有一些好的习惯用法/策略/最佳实践? 编辑来澄清:我不是在鼓动或建议Go团队提出更好的建议。我问的是我做对了还是错过了社区提出的一些技巧。谢谢大家
108 go 

3
示例对sync.WaitGroup正确吗?
此示例用法sync.WaitGroup正确吗?它给出了预期的结果,但是我不确定wg.Add(4)的位置wg.Done()。一次添加四个goroutine是否有意义wg.Add()? http://play.golang.org/p/ecvYHiie0P package main import ( "fmt" "sync" "time" ) func dosomething(millisecs time.Duration, wg *sync.WaitGroup) { duration := millisecs * time.Millisecond time.Sleep(duration) fmt.Println("Function in background, duration:", duration) wg.Done() } func main() { var wg sync.WaitGroup wg.Add(4) go dosomething(200, &wg) go dosomething(400, &wg) go dosomething(150, &wg) go dosomething(600, &wg) wg.Wait() fmt.Println("Done") …
108 go  goroutine 

6
如何找出切片中的元素位置?
如何确定切片中存在的元素的位置? 我需要以下内容: type intSlice []int func (slice intSlice) pos(value int) int { for p, v := range slice { if (v == value) { return p } } return -1 }
108 position  go  slice 

11
如何将日志写入文件
我正在尝试使用Go写入日志文件。 我尝试了几种方法,但都失败了。这是我尝试过的: func TestLogging(t *testing.T) { if !FileExists("logfile") { CreateFile("logfile") } f, err := os.Open("logfile") if err != nil { t.Fatalf("error: %v", err) } // attempt #1 log.SetOutput(io.MultiWriter(os.Stderr, f)) log.Println("hello, logfile") // attempt #2 log.SetOutput(io.Writer(f)) log.Println("hello, logfile") // attempt #3 log.SetOutput(f) log.Println("hello, logfile") } func FileExists(name string) bool { if …
108 go  logging 

5
如何在不使用time.Sleep的情况下等待所有goroutine完成?
这段代码将选择同一文件夹中的所有xml文件,作为被调用的可执行文件,并以异步方式将处​​理应用于回调方法中的每个结果(在下面的示例中,仅打印出文件名)。 如何避免使用sleep方法阻止main方法退出?我在解决问题时遇到了麻烦(我想这就是同步结果所需要的),因此对您有所帮助! package main import ( "fmt" "io/ioutil" "path" "path/filepath" "os" "runtime" "time" ) func eachFile(extension string, callback func(file string)) { exeDir := filepath.Dir(os.Args[0]) files, _ := ioutil.ReadDir(exeDir) for _, f := range files { fileName := f.Name() if extension == path.Ext(fileName) { go callback(fileName) } } } func main() …

2
值接收器与指针接收器
对于我而言,目前尚不清楚,在这种情况下,我想使用值接收器而不是始终使用指针接收器。 回顾一下文档: type T struct { a int } func (tv T) Mv(a int) int { return 0 } // value receiver func (tp *T) Mp(f float32) float32 { return 1 } // pointer receiver 该文档还说:“对于基本类型,切片和小型结构之类的类型,值接收器非常便宜,因此,除非该方法的语义要求使用指针,否则值接收器是高效且清晰的。” 首先,它说“非常便宜”,但问题是它比指针接收器便宜。因此,我做了一个小的基准测试(基于要点的代码),向我展示了,即使对于只有一个字符串字段的结构,指针接收器也更快。结果如下: // Struct one empty string property BenchmarkChangePointerReceiver 2000000000 0.36 ns/op BenchmarkChangeItValueReceiver 500000000 3.62 …
107 function  pointers  go 

3
在Go中遍历结构的字段
基本上,(我知道)迭代a的字段值的唯一方法struct是这样的: type Example struct { a_number uint32 a_string string } //... r := &Example{(2 << 31) - 1, "...."}: for _, d:= range []interface{}{ r.a_number, r.a_string, } { //do something with the d } 我想知道,是否有更好,更通用的实现方法[]interface{}{ r.a_number, r.a_string, },所以我不需要单独列出每个参数,或者有没有更好的方法遍历结构? 我试图浏览一下reflect包装,但是碰到了墙,因为我不确定一旦取回该怎么办reflect.ValueOf(*r).Field(0)。 谢谢!
107 go  go-reflect 

4
如何在Golang中打破一长行代码?
来自Python,我不习惯看到超过80列的代码行。所以当我遇到这个: err := database.QueryRow("select * from users where user_id=?", id).Scan(&ReadUser.ID, &ReadUser.Name, &ReadUser.First, &ReadUser.Last, &ReadUser.Email) 我试图打破它 err := database.QueryRow("select * from users where user_id=?", id) \ .Scan(&ReadUser.ID, &ReadUser.Name, &ReadUser.First, &ReadUser.Last, &ReadUser.Email) 但是我明白了 syntax error: unexpected \ 我还尝试过按回车键并在最后加上分号来打破界限: err := database.QueryRow("select * from users where user_id=?", id) .Scan(&ReadUser.ID, &ReadUser.Name, &ReadUser.First, &ReadUser.Last, &ReadUser.Email); …
107 go  syntax 

4
如何用Go语言从另一个文件调用函数?
我想从go lang中的另一个文件中调用函数,有什么可以帮助吗? test1.go package main func main() { demo() } test2.go package main import "fmt" func main() { } func demo() { fmt.Println("HI") } 如何调用demo中test2的test1?
107 go 

2
使用reflect,如何设置结构字段的值?
在使用reflect包处理结构字段时遇到了麻烦。特别是,还没有弄清楚如何设置字段值。 输入t struct {fi int; fs字符串} var rt = t {123,“ jblow”} var i64 int64 = 456 获取字段i的名称-这似乎起作用 var field = reflect.TypeOf(r).Field(i).Name 以a)接口{},b)int的形式获取字段i的值-这似乎可行 var iface interface{} = reflect.ValueOf(r).Field(i).Interface() var i int = int(reflect.ValueOf(r).Field(i).Int()) 设置字段i的值-尝试一次-紧急 reflect.ValueOf(r).Field(i).SetInt( i64 ) 恐慌:使用未导出字段获得的值来反映reflect.Value·SetInt 假设它不喜欢字段名称“ id”和“ name”,因此将其重命名为“ Id”和“ Name” a)这个假设正确吗? b)如果正确,则认为没有必要,因为在同一文件/软件包中 设置字段i的值-尝试两个(字段名大写)-紧急 reflect.ValueOf(r).Field(i).SetInt( 465 ) reflect.ValueOf(r).Field(i).SetInt( …

7
如何在Golang中为http.Get()请求设置超时?
我在Go中制作了一个URL提取程序,并具有要提取的URL列表。我将http.Get()请求发送到每个URL并获得他们的响应。 resp,fetch_err := http.Get(url) 如何为每个Get请求设置自定义超时?(默认时间很长,这会使我的提取程序非常慢。)我希望提取程序的超时时间为40-45秒左右,之后它应该返回“请求超时”并移至下一个URL。 我该如何实现?
106 http  get  timeout  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.