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

Gar*_*ary 6 go

我正在使用 go 1.4 运行一个程序,我试图将一个大结构传递给一个 go 函数。

go ProcessImpression(network, &logImpression, campaign, actualSpent, partnerAccount, deviceId, otherParams)
Run Code Online (Sandbox Code Playgroud)

我收到此错误:

runtime.newproc: function arguments too large for new goroutine
Run Code Online (Sandbox Code Playgroud)

我已经转向通过引用传递,这有帮助,但我想知道是否有某种方法可以在 go 函数中传递大型结构。

谢谢,

two*_*two 2

不,我不知道。

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