gpt4 book ai didi

go - 如何在 go 中使用 channel 填充数组

转载 作者:IT王子 更新时间:2023-10-29 01:58:56 29 4
gpt4 key购买 nike

我正在尝试构建一个带有 go channel 的数组。我不关心广告订单,但我只收到来自 channel 的最后一项。

package main

import (
"fmt"
)

func AddToMap(thing string, val string, c chan map[string]string) {
mappy := make(map[string]string)
mappy[thing] = val
c <- mappy
}

func main() {
item := make([]map[string]string, 0, 10)
list1 := []string{"foo", "bar", "baz", "blah", "barf"}
list2 := []string{"one", "two", "three", "four", "five"}
c := make(chan map[string]string)
for index, val := range list1 {
go AddToMap(val, list2[index], c)
}
ret := <-c
item = append(item, ret)
fmt.Println(item)
}

我的输出是:[map[barf:five]]

最佳答案

当数据被写入其中时,您需要从 channel 中连续读取。当你完成将数据泵入 channel 后,关闭它。这是它的工作原理。

注意:AddToMap 没有作为独立的 goroutine 被调用。这可以使用 waitgroup 来完成,因为我们需要知道何时需要关闭 channel c,这将在所有 AddToMap 运行之后。

package main

import (
"fmt"
)

func AddToMap(thing string, val string, c chan map[string]string) {
mappy := make(map[string]string)
mappy[thing] = val
c <- mappy
}

func main() {
item := make([]map[string]string, 0, 10)
list1 := []string{"foo", "bar", "baz", "blah", "barf"}
list2 := []string{"one", "two", "three", "four", "five"}
c := make(chan map[string]string)
go func(){
for index, val := range list1 {
AddToMap(val, list2[index], c)
}
close(c)
}()
for ret := range c {
item = append(item, ret)
}
fmt.Println(item)
}

关于go - 如何在 go 中使用 channel 填充数组,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36563396/

29 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com