Maison >développement back-end >Golang >Créer une structure GO uniquement si certaines conditions sont remplies
L'éditeur PHP Zimo vous présentera une fonctionnalité importante, qui est la création de structures GO dans des conditions spécifiques. Cette fonctionnalité nous permet de déterminer s'il convient de créer une structure GO selon les besoins, améliorant ainsi l'efficacité et les performances du programme. En utilisant cette fonctionnalité de manière rationnelle, nous pouvons éviter la création inutile de structures GO, réduire l'utilisation de la mémoire et la pression du garbage collection et améliorer l'efficacité d'exécution du programme. Dans cet article, nous détaillerons comment utiliser cette fonctionnalité et donnerons quelques exemples d’applications pratiques.
Mon extrait de code go est le suivant :
type mystruct struct { a int } if a == nil { cond = 0 var a_mystruct_obj mystruct // if this condition is satified then only create this a_mystruct_obj obj } else if b == nil { cond = 1 var b_mystruct_obj mystruct // if this condition is satified then only create this b_mystruct_obj obj } else { cond = 2 // // if this condition is satified then create both the above structure objects a_mystruct_obj & b_mystruct_obj. // is having the below declaration again in else a valid go code ? var a_mystruct_obj mystruct var b_mystruct_obj mystruct }
J'ai une formation en C++. Ce serait facile en C++. Y a-t-il une allocation dynamique de mémoire en cours ? Comment puis-je y parvenir ?
Est-ce que déclarer à nouveau 2 dans un autre code go valide ?
var A_mystruct_obj MyStruct var B_mystruct_obj MyStruct
Ou dois-je avoir une sorte de polymorphisme d'exécution ici.
Mise à jour :
J'ai essayé de faire cela mais cela n'a même pas été compilé comme prévu.
https://go.dev/play/p/ioq81aexgjn
à nouveau mis à jour
J'ai essayé ceci et cela semble fonctionner. Est-ce correct?
https://go.dev/play/p/r_ywzmkgrps
Il y a deux problèmes dans votre code :
if
/else
) Lorsque vous résolvez le premier problème, qui consiste à déplacer la déclaration de variable vers l'accès au code après l'instruction if
子句范围之外,以使它们可以被 if
:
var a_mystruct_obj mystruct var b_mystruct_obj mystruct if a == nil { cond = 0 // initialise a_mystruct } else if b == nil { cond = 1 // initialise b_mystruct } else { cond = 2 // initialise a_mystruct and b_mystruct }
Maintenant, les deux variables sont déclarées et les deux variables utilisent quelle clause dans l'instruction mystruct
进行初始化,无论到达 if
nouvellement attribuée.
Pour résoudre ce problème, changez la variable en pointeur et attribuez la valeur souhaitée dans la branche correspondante de l'instruction if
:
var a_mystruct_obj *mystruct var b_mystruct_obj *mystruct if a == nil { cond = 0 a_mystruct_obj = &mystruct{} } else if b == nil { cond = 1 b_mystruct_obj = &mystruct{} } else { cond = 2 a_mystruct_obj = &mystruct{} b_mystruct_obj = &mystruct{} }
Astuce bonus : futur vous vous remerciera d'avoir refactorisé cela en une paire d'instructions, déterminera si vous avez besoin de a
ou b
ou des deux, puis simplifiera votre L'instruction composée a
或 b
或两者,然后简化您的复合 if
语句作为两个单独语句,分别初始化 a
或 b
agit comme deux
distinctes, initialisant respectivement a
ou b
:
var A_mystruct_obj *MyStruct
var B_mystruct_obj *MyStruct
areq := a == nil || (..condition 2..)
breq := b == nil || (..condition 2..)
if areq {
A_mystruct_obj = &MyStruct{}
}
if breq {
B_mystruct_obj = &MyStruct{}
}
Le but est d’éviter les duplications logiques (principe sec : a
和/或 b
是否需要的问题与初始化 a
和 b
Ne vous répétez pas
est nécessaire. em> Obligatoire. condition 2
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!