Tag:

如何分割一个string并将其分配给Golang中的variables?

在Python中,可以分割一个string并将其分配给variables: ip, port = '127.0.0.1:5432'.split(':') 但是在Golang中,它似乎不起作用: ip, port := strings.Split("127.0.0.1:5432", ":") // assignment count mismatch: 2 = 1 问题:如何分割一个string并在一个步骤中分配值?

复制地图的所有元素到另一个

特定 var dst, src map[K]V 我可以通过做复制从src所有条目到dst for k, v := range src { dst[k] = v } 有没有更习惯的方式来做到这一点? copy只适用于切片(和作为源的string )。

sync.WaitGroup的例子是否正确?

sync.WaitGroup这个示例用法sync.WaitGroup正确? 它给出了预期的结果,但我不确定wg.Add(4)和wg.Done()的位置。 wg.Add()一次添加四个goroutines是否有意义? 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") } 结果(如预期): Function […]

如何在Go中获得一个函数的名字?

给定一个函数,是否有可能得到它的名字? 说: func foo() { } func GetFunctionName(i interface{}) string { // … } func main() { // Will print "name: foo" fmt.Println("name:", GetFunctionName(foo)) } 我被告知runtime.FuncForPC会有帮助,但我不明白如何使用它。

如何等待所有的goroutines完成,而不使用time.Sleep?

此代码select与被调用的可执行文件相同的文件夹中的所有xml文件,并将asynchronous处理应用于callback方法中的每个结果(在下面的示例中,只是打印出文件的名称)。 我如何避免使用睡眠方法来防止主要方法退出? 我有问题缠绕我的头(我假设这是需要的,同步结果),所以任何帮助表示赞赏! 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() { maxProcs := runtime.NumCPU() […]

使用reflection,你如何设置一个struct字段的值?

有一个艰难的时间使用reflect包使用struct字段。 特别是还没有想出如何设置字段值。 键入t struct {fi int; fs string} var rt = t {123,“jblow”} var i64 int64 = 456 得到领域的名字我 – 这似乎工作 var field = reflect.TypeOf(r).Field(i).Name 获得领域我的价值作为一个)interface {},b)int – 这似乎工作 var iface interface{} = reflect.ValueOf(r).Field(i).Interface() var i int = int(reflect.ValueOf(r).Field(i).Int()) 设置领域的价值 – 尝试一个恐慌 reflect.ValueOf(r).Field(i).SetInt( i64 ) 恐慌 :reflect.Value·SetInt使用取得的值使用未导出的字段 假设它不喜欢字段名称“id”和“name”,所以改名为“Id”和“Name” a)这个假设是否正确? b)如果正确,认为没有必要,因为在相同的文件/包 设置字段i的值 – 尝试两个(字段名称大写) – 恐慌 […]

你将如何定义在Golang一次执行的goroutines池?

TL; TR:请到最后一部分,告诉我你将如何解决这个问题。 我今天早上从Python开始使用Golang。 我想多次调用一个来自Go的闭源代码,带有一些并发性,带有不同的命令行参数。 我的结果代码工作得很好,但我想获得您的input,以改善它。 由于我处于早期学习阶段,所以我也会解释一下我的工作stream程。 为了简单起见,这里假设这个“外部闭源程序”是zenity ,一个Linux命令行工具,可以从命令行显示graphics消息框。 从Go调用可执行文件 所以,在Go中,我会这样做: package main import "os/exec" func main() { cmd := exec.Command("zenity", "–info", "–text='Hello World'") cmd.Run() } 这应该是正确的。 请注意.Run()与.Start()后跟.Wait()的function相同。 这很好,但如果我只想执行一次这个程序,整个编程的东西就不值得。 所以让我们多次这样做。 调用可执行文件多次 现在,我有这个工作,我想多次调用我的程序,自定义命令行参数(这里只是为了简单起见)。 package main import ( "os/exec" "strconv" ) func main() { NumEl := 8 // Number of times the external program is called for i:=0; […]

从标准input读取一个整数

如何使用Go中的fmt.Scanf函数从标准input中获取整数input? 如果这不能使用fmt.Scanf来完成,那么读取单个整数的最好方法是什么?

有没有一种方法可以用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的string,但我不认为它是一个有效的UUID。 如果它是一个真正的UUID,为什么它是一个UUID,代码的目的是修改u[8]和u[6] 。 有没有更好的方式来生成UUID?

安装去与酿造,并运行gotour

我正在关注http://tour.golang.org/,直到第三步,告诉你可以在你的系统上安装gotour。 之后我用brew来安装go语言: brew install hg brew install go 然后我通过下载了这个gotour: go get code.google.com/p/go-tour/gotour 当我试图启动的时候,它没有认出这个命令: $ gotour -bash: gotour: command not found 和 $ go gotour 和 $ ./gotour 所以我试图去看看去的路,它是空的, echo $GOPATH 所以我定义了GOPATH: GOPATH=/usr/local/Cellar/go/1.0.2/src/pkg/code.google.com/p/ export GOPATH 现在我可以跑跑步了 ./gotour 但是我对自己的环境并不安全。不是我被认为是能够运行的 go run gotour 或者只是通过input(就像在这个网站上描述的那样: http : //www.moncefbelyamani.com/how-to-install-the-go-tour-on-your-mac/ ) gotour 我想知道如果我是正确的做法,因为我是新的编程语言。