作為測試 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
并沒有就這個問題發出警告。
- 1 回答
- 0 關注
- 157 瀏覽
添加回答
舉報
0/150
提交
取消