是的,这是安全的,并且是Go编程中的常规模式。Go使用转义分析来移动带有指针的所有值,这些指针会自动将栈转义到堆。您无需担心在何处分配值。
从Go常见问题解答中:“我如何知道是在堆还是在堆栈上分配了变量?”
如果编译器无法证明函数返回后未引用该变量,则编译器必须在垃圾回收堆上分配该变量,以避免悬空指针错误
使用该
-gcflags -m选项,您可以在编译期间看到这些优化选择。

是的,这是安全的,并且是Go编程中的常规模式。Go使用转义分析来移动带有指针的所有值,这些指针会自动将栈转义到堆。您无需担心在何处分配值。
从Go常见问题解答中:“我如何知道是在堆还是在堆栈上分配了变量?”
如果编译器无法证明函数返回后未引用该变量,则编译器必须在垃圾回收堆上分配该变量,以避免悬空指针错误
使用该
-gcflags -m选项,您可以在编译期间看到这些优化选择。