1 回答
TA贡献1790条经验 获得超9个赞
您需要一个指向指针的指针来更改指针的值。
这是您的代码示例,已修改为执行此操作 ( playground ):
package main
import (
"fmt"
)
type position struct {
x int
y int
}
func destroy(p **position) {
*p = nil
}
func main() {
p1 := &position{1, 1}
destroy(&p1)
if p1 == nil {
fmt.Println("p1 == nil")
} else {
fmt.Println(p1)
}
}
在您当前的代码中
func destroy(p *position) {
p = nil
}
在里面destroy,p是一个保存结构地址的值position。通过给p自己分配一些东西,你只是让它保存一些其他position结构(或nil)的地址。您没有修改传入的原始指针。
这与尝试通过分配给它来修改其参数的函数没有什么不同:
// This will not actually modify the argument passed in by the caller
func setto2(value int) {
value = 2
}
go 规范在关于调用和调用参数的部分中说:
在对它们求值后,调用的参数按值传递给函数,被调用的函数开始执行。函数的返回参数在函数返回时按值传递回调用函数。
- 1 回答
- 0 关注
- 92 浏览
添加回答
举报