登录
首页 >  Golang >  Go问答

为什么我的 Go 函数参数在不同作用域中具有不同的尺寸?

来源:stackoverflow

时间:2024-02-24 16:33:26 155浏览 收藏

怎么入门Golang编程?需要学习哪些知识点?这是新手们刚接触编程时常见的问题;下面golang学习网就来给大家整理分享一些知识点,希望能够给初学者一些帮助。本篇文章就来介绍《为什么我的 Go 函数参数在不同作用域中具有不同的尺寸?》,涉及到,有需要的可以收藏一下

问题内容

作为 golang 测试的一部分,我最终遇到了障碍,所以我是一个新手。

我编写了一个快速玩具程序来搜索字符串列表中的模式,并且我想同时执行此操作。

我编写了一个 search(data *[]string, input_string *string, channel chan<- []string) 函数,采用一个通道将过滤后的 data 作为结果发送回。

但是,在将 data 传递给函数之前,它的大小似乎有所不同,并且在函数内部:在 search 内部,它的大小非常小,而且不正确。

完整的代码在这里:https://gitlab.com/jiehong/kata_test_language/-/blob/master/wiki.go#l39,所以你可以测试它。

基本上,我启动一系列 go 例程,并从它们自己的通道中一个接一个地检索它们的结果:

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 []string
for _, channel := range channels {
    part_filtered := <-channel
    filtered_data = append(filtered_data, part_filtered...)
}

但是 chunk 虽然在循环内有效,但在 search 处理它时似乎为空。

我在这里做错了什么?


解决方案


问题是 search 采用 *[]string。将其更改为 []string 即可修复。

这被 Volker 表示为“也”,但这是解决方案。

正如 hmm 所指出的,这可能会链接到 https://github.com/golang/go/wiki/CommonMistakes#using-goroutines-on-loop-iterator-variables

运行 go vet wiki.go 并没有警告此问题。

以上就是本文的全部内容了,是否有顺利帮助你解决问题?若是能给你带来学习上的帮助,请大家多多支持golang学习网!更多关于Golang的相关知识,也可关注golang学习网公众号。

声明:本文转载于:stackoverflow 如有侵犯,请联系study_golang@163.com删除
相关阅读
更多>
最新阅读
更多>
课程推荐
更多>