func main() {
i1 := 1
A1(&i1)
}
func A1(i1 *int) *int {
return i1
}
Run Code Online (Sandbox Code Playgroud)
逃逸分析的结果为
./main.go:18:9: parameter i1 leaks to \~r1 with derefs=0:
./main.go:18:9: flow: \~r1 = i1:
./main.go:18:9: from return i1 (return) at ./main.go:19:2
./main.go:18:9: leaking param: i1 to result \~r1 level=0
Run Code Online (Sandbox Code Playgroud)
parameter i1 leaks to \~r1 with derefs=0和是什么意思leaking param: i1 to result \~r1 level=0
首先我尝试 Google ,最相关的结果是escape-analysis-shows-channel-as-leaking-paramgolang escape leaking的评论
“你为什么那么想?” 可以合理地假设泄漏是严重的并且与其阀杆泄漏有关。我正在努力想出一个示例上下文,其中泄漏是一件好事,例如泄漏的水桶、泄漏的油箱、泄漏的泄漏、泄漏的电容器、泄漏的船、泄漏的抽象。对于高性能 Go 专家来说,这可能是显而易见的,但对于我们其他人来说,链接到文档并提供泄漏参数所指内容的简要说明会很有帮助
我也想问同样的问题,但之后就没有再回复了。
然后我尝试阅读打印这些结果的源代码。
在compile/internal/escape/leaks.go中,我发现了评论
// 泄漏代表来自参数的一组赋值流
// …