作者回复: 感谢支持!
作者回复: 感谢支持👍。后续是否有课程,尚不确定:)
作者回复: foo函数中的变量b不会被分配在栈上,会在堆上分配。这个go编译器会做逃逸分析(escape analysis)。
作者回复: 这里可能表达不清。主要要表达的意思是通过指针传递参数与非指针传递参数的差别。非指针传递 改变的是拷贝,而不是原变量。
作者回复: 按照你的问题,写了一个例子: package main func foo(p *int) { var b int = 55 p = &b } func main() { var a int = 5 var p *int = &a println(*p) // 5 foo(p) println(*p) // 5 } 在这个例子中,main中的p和foo的参数p完全是两个不同函数栈上的变量,虽然foo参数p指向的也是main函数的变量a。 foo函数可以等价于: func foo() { var p *int var b int = 55 p = &b } foo的参数就等价于其函数内声明的本地变量。 所以foo内对p的修改,与main函数中的p并无关系。
作者回复: 的确是笔误,后续让编辑老师修改一下,感谢指出。
作者回复: :)
作者回复: 👍😄
作者回复: macro?go好像从来没有考虑加上macro。
作者回复: 嗯嗯。后续看是否有机会:)