为了账号安全,请及时绑定邮箱和手机立即绑定

Golang 错误函数参数对于新的 goroutine 来说太大了

Golang 错误函数参数对于新的 goroutine 来说太大了

Go
慕尼黑8549860 2021-09-13 14:46:24
我正在使用 go 1.4 运行一个程序,我试图将一个大结构传递给一个 go 函数。go ProcessImpression(network, &logImpression, campaign, actualSpent, partnerAccount, deviceId, otherParams)我收到此错误:runtime.newproc: function arguments too large for new goroutine我已经转向通过引用传递,这有帮助,但我想知道是否有某种方法可以在 go 函数中传递大型结构。谢谢,
查看完整描述

3 回答

?
富国沪深

TA贡献1790条经验 获得超9个赞

不,我不知道。

我认为您不应该过于激进地调整以避免复制,但是从源头看来当参数超过新 goroutine 的可用堆栈空间(应该是千字节)时,会发出此错误。复制开销在那时是真实的,特别是如果这不是这些东西被复制的唯一时间。由于大型结构成员(比如 1kb 数组而不是切片),或者间接地,某些结构可能显式地大于预期。如果没有,只使用一个指针是有意义的,如果你担心创建垃圾,回收指向 using 的结构sync.Pool


查看完整回答
反对 回复 2021-09-13
?
绝地无双

TA贡献1946条经验 获得超4个赞

我能够通过更改参数来解决这个问题

func doStuff(prev, next User)

func doStuff(prev, next *User)

这里@twotwotwo 的回答非常有帮助。


查看完整回答
反对 回复 2021-09-13
?
慕慕森

TA贡献1856条经验 获得超17个赞

在处理[]BigType大结构的值()列表时遇到了这个问题:


for _, stct := range listBigStcts {

    go func(stct BigType) {

        ...process stct ...

    }(stct) // <-- error occurs here


}

解决方法是替换[]BigType为[]*BigType


查看完整回答
反对 回复 2021-09-13
  • 3 回答
  • 0 关注
  • 178 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信