gpt4 book ai didi

go - 匿名函数似乎没有在 Go 例程中执行

转载 作者:数据小太阳 更新时间:2023-10-29 03:38:41 24 4
gpt4 key购买 nike

我有以下代码。特别注意匿名函数:

func saveMatterNodes(matterId int, nodes []doculaw.LitigationNode) (bool, error) {

var (
err error
resp *http.Response
)

// Do this in multiple threads
for _, node := range nodes {
fmt.Println("in loops")
go func() {
postValues := doculaw.LitigationNode{
Name: node.Name,
Description: node.Description,
Days: node.Days,
Date: node.Date,
IsFinalStep: false,
Completed: false,
Matter: matterId}

b := new(bytes.Buffer)
json.NewEncoder(b).Encode(postValues)
resp, err = http.Post("http://127.0.0.1:8001/matterNode/", "application/json", b)
io.Copy(os.Stdout, resp.Body)

fmt.Println("Respone from http post", resp)
if err != nil {
fmt.Println(err)
}
}()

}

if err != nil {
return false, err
} else {
return true, nil
}

}

如果我删除 go func() {}() 部分并将代码保留在中间,它似乎执行得很好,但当我将它添加回去时它不会执行。知道为什么吗?我最初认为可能是因为它在不同的线程上执行,但情况似乎并非如此,因为我在我的 Web 服务访问日志中看到它没有执行。

最佳答案

我认为这种行为是因为函数永远不会返回到主线程(启动 goroutine 后,程序中没有构造等待它们完成工作)。使用 channel 、IO 操作、sync.WaitGroup 等可以将控制权交还给主线程。

你可能想试试 sync.WaitGroup

示例:https://play.golang.org/p/Zwn0YBynl2

关于go - 匿名函数似乎没有在 Go 例程中执行,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41233835/

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