我想使用函式庫(golang walk聲明式),它希望我傳遞一個指標變量,並且函式庫稍後將用一個實例填充它。
出於簿記目的,我嘗試建立一個函數來傳回參考並進一步傳遞它,但在原始函數中我沒有取回對正確物件的參考。
我試圖簡化問題,但我仍然無法正確解決問題,如何在不修改設定函數的情況下,在 test_ref 結構內將值世界填入地圖中。
工作程式碼
<code>var t *walk.LineEdit ... LineEdit{ AssignTo: &t, }, </code>
我的嘗試
LineEdit{ AssignTo: GetLineEdit("msg"), }, ... func GetLineEdit(name string) **walk.LineEdit {
測試程式碼
type test_ref struct { v map[string]*string } func (t *test_ref) init() { t.v = map[string]*string{} } func (t *test_ref) return_ref() **string { s := "hello" t.v["a"] = &s p := t.v["a"] return &p } type test_setup struct { s **string } //dont modify this function func setup(t test_setup) { w := "world" *(t.s) = &w } func main() { tr := test_ref{} tr.init() s := tr.return_ref() setup(test_setup{ s: s, }) fmt.Println(*tr.v["a"])//logging hello }
如果我對設定函數進行小修改,我可以讓它工作,但由於我不想更新步行庫,我想知道是否有一種方法可以在不觸及設定函數的情況下完成此操作。 < /p>
<code>func setup(t test_setup) { w := "world" **(t.s) = w } </code>
#這裡:
func (t *test_ref) return_ref() **string { s := "hello" t.v["a"] = &s p := t.v["a"] return &p }
您回傳的是變數p
的位址。
我認為這就是您正在嘗試做的事情:
func (t *test_ref) return_ref() *string { s := "hello" t.v["a"] = &s return &s }
上面將傳回s
的位址,這是儲存在地圖中的內容。然後:
這會將字串的值設為「world」。
您可以進一步深造並執行以下操作:
type test_ref struct { v map[string]**string } func (t *test_ref) init() { t.v = map[string]**string{} } func (t *test_ref) return_ref() **string { s := "hello" k := &s t.v["a"] = &k return &k } type test_setup struct { s **string } // dont modify this function func setup(t test_setup) { w := "world" *(t.s) = &w } func main() { tr := test_ref{} tr.init() s := tr.return_ref() setup(test_setup{ s: s, }) fmt.Println(**tr.v["a"]) //logging hello }
以上是Golang 指針混淆,如何從函數取得指針,然後傳遞給修改函數的詳細內容。更多資訊請關注PHP中文網其他相關文章!