我想知道如何初始化一個指向結構的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 關注
- 84 瀏覽
添加回答
舉報
0/150
提交
取消