为了账号安全,请及时绑定邮箱和手机立即绑定

为什么我的 go 函数参数在调用函数之前和函数内部的大小不同?

为什么我的 go 函数参数在调用函数之前和函数内部的大小不同?

Go
千万里不及你 2022-06-13 10:37:07
作为测试 Golang 的一部分,我最终遇到了障碍,所以我是新手。我编写了一个快速玩具程序来搜索字符串列表中的模式,我想同时进行。我编写了一个search(data *[]string, input_string *string, channel chan<- []string)函数,使用一个通道将过滤后data的结果发回。但是,data在我将它传递给函数之前,它的大小似乎有所不同,并且在函数内部: inside search,它的大小非常小,而且不正确。完整的代码在那里:https ://gitlab.com/jiehong/kata_test_language/-/blob/master/wiki.go#L39 ,所以你可以测试它。基本上,我启动了一个 goroutine 列表,并一个接一个地从他们自己的频道中检索它们的结果:var channels [](chan []string)for _, chunk := range chunks {    channel := make(chan []string, 1)    channels = append(channels, channel)    go search(&chunk, &input_string, channel)}var filtered_data []stringfor _, channel := range channels {    part_filtered := <-channel    filtered_data = append(filtered_data, part_filtered...)}但是chunk,虽然在循环内有效,但在search处理它时似乎是空的。我在这里做错了什么?
查看完整描述

1 回答

?
catspeake

TA贡献1111条经验 获得超0个赞

问题是search需要一个*[]string. 更改它以[]string修复它。

这被沃尔克表示为“也”,但这是修复。

正如 hmm 所指出的,这可能与https://github.com/golang/go/wiki/CommonMistakes#using-goroutines-on-loop-iterator-variables相关联。

不过, Runninggo vet wiki.go并没有就这个问题发出警告。


查看完整回答
反对 回复 2022-06-13
  • 1 回答
  • 0 关注
  • 132 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信