Maison >développement back-end >Golang >Confusion du pointeur Golang, comment obtenir le pointeur de la fonction puis le transmettre à la fonction de modification
Je souhaite utiliser une bibliothèque (déclarative golang walk) qui s'attend à ce que je passe une variable de pointeur et la bibliothèque la remplira plus tard avec une instance.
À des fins de comptabilité, j'ai essayé de créer une fonction pour renvoyer la référence et la transmettre plus loin, mais dans la fonction d'origine, je n'ai pas récupéré la référence au bon objet.
J'ai essayé de simplifier le problème mais je n'arrive toujours pas à comprendre correctement comment remplir le monde des valeurs dans une carte à l'intérieur de la structure test_ref sans modifier la fonction de configuration.
Code de travail
<code>var t *walk.LineEdit ... LineEdit{ AssignTo: &t, }, </code>
Ma tentative
LineEdit{ AssignTo: GetLineEdit("msg"), }, ... func GetLineEdit(name string) **walk.LineEdit {
Code de test
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 }
Si j'apporte une petite modification à la fonction de configuration, je peux la faire fonctionner, mais comme je ne souhaite pas mettre à jour la bibliothèque ambulante, je me demandais s'il existe un moyen de le faire sans toucher à la fonction de configuration.
<code>func setup(t test_setup) { w := "world" **(t.s) = w } </code>
ici :
func (t *test_ref) return_ref() **string { s := "hello" t.v["a"] = &s p := t.v["a"] return &p }
Ce que vous renvoyez est l'adresse de la variable p
.
Je pense que c'est ce que vous essayez de faire :
func (t *test_ref) return_ref() *string { s := "hello" t.v["a"] = &s return &s }
Ce qui précède renverra l'adresse de s
, qui est celle stockée sur la carte. Puis :
Cela définira la valeur de la chaîne sur "world".
Vous pouvez poursuivre vos études et faire ce qui suit :
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 }
Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!