gpt4 book ai didi

go - 发送 channel 后Goroutine无法执行

转载 作者:行者123 更新时间:2023-12-01 21:19:08 25 4
gpt4 key购买 nike

package main

import (
"fmt"
"sync"
)

// PUT function
func put(hashMap map[string](chan int), key string, value int, wg *sync.WaitGroup) {
defer wg.Done()
fmt.Printf("this is getting printed")
hashMap[key] <- value
fmt.Printf("this is not getting printed")
fmt.Printf("PUT sent %d\n", value)
}

func main() {
var value int
var key string
wg := &sync.WaitGroup{}
hashMap := make(map[string](chan int), 100)
key = "xyz"
value = 100
for i := 0; i < 5; i++ {
wg.Add(1)
go put(hashMap, key, value, wg)
}
wg.Wait()
}

put函数中的最后两个print语句未得到打印,我正在尝试根据键将值放入映射中。

以及在这种情况下如何关闭hashMap。

最佳答案

  • 您需要创建一个 channel ,例如hashMap[key] = make(chan int)
  • 由于您不是从 channel 中读取内容,因此需要缓冲 channel 才能使其正常工作:
  •     key := "xyz"
    hashMap[key] = make(chan int, 5)

    尝试以下代码:
    func put(hashMap map[string](chan int), key string, value int, wg *sync.WaitGroup) {
    hashMap[key] <- value
    fmt.Printf("PUT sent %d\n", value)
    wg.Done()
    }
    func main() {
    var wg sync.WaitGroup
    hashMap := map[string]chan int{}
    key := "xyz"
    hashMap[key] = make(chan int, 5)
    for i := 0; i < 5; i++ {
    wg.Add(1)
    go put(hashMap, key, 100, &wg)
    }
    wg.Wait()
    }

    输出:
    PUT sent 100
    PUT sent 100
    PUT sent 100
    PUT sent 100
    PUT sent 100

    关于go - 发送 channel 后Goroutine无法执行,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/60647476/

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