我想知道如何初始化一个指向结构的nil指针,当函数接收此参数为.initializeinterface{}假设我将始终发送一个指针,并且函数的参数类型严格,我如何使此代码工作?interface{}type Foo struct {}func main() { var foo *Foo fmt.Println("foo is nil: ", foo) initialize(foo) fmt.Println("foo should not be nil: ", foo) // foo should be Foo{}, but it is nil}func initialize(fooPointer interface{}) { reflect.ValueOf(&fooPointer).Elem().Set(reflect.ValueOf(&Foo{})) fmt.Println("fooPointer is not nil: ", fooPointer)}https://play.golang.org/p/Va0bqXJGhWZ
1 回答
拉丁的传说
TA贡献1789条经验 获得超8个赞
若要修改被调用函数中的变量,必须将变量的地址传递给被调用函数。
使用以下代码:
func main() {
var foo *Foo
fmt.Println("foo is nil: ", foo)
initialize(&foo) // <-- Pass address of variable
fmt.Println("foo should not be nil: ", foo) // foo should be Foo{}, but it is nil
}
func initialize(fooPP interface{}) {
// No need for & here because fooPP is a **Foo.
reflect.ValueOf(fooPP).Elem().Set(reflect.ValueOf(&Foo{}))
fmt.Println("fooPointer is not nil: ", fooPointer)
}
- 1 回答
- 0 关注
- 64 浏览
添加回答
举报
0/150
提交
取消