Der PHP-Editor Zimo stellt Ihnen eine wichtige Funktion vor, nämlich die Erstellung von GO-Strukturen unter bestimmten Bedingungen. Mit dieser Funktion können wir bestimmen, ob bei Bedarf eine GO-Struktur erstellt werden soll, wodurch die Effizienz und Leistung des Programms verbessert wird. Durch die rationelle Nutzung dieser Funktion können wir die unnötige Erstellung von GO-Strukturen vermeiden, die Speichernutzung und den Speicherbereinigungsdruck reduzieren und die Ausführungseffizienz des Programms verbessern. In diesem Artikel gehen wir detailliert auf die Verwendung dieser Funktion ein und geben einige Beispiele für praktische Anwendungen.
Mein Go-Code-Snippet lautet wie folgt:
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 }
Ich habe C++-Hintergrund. Das wäre in C++ einfach. Gibt es in go eine dynamische Speicherzuweisung? Wie kann ich das in go erreichen?
Ist die erneute Deklaration von 2 in einem anderen gültigen Go-Code?
var A_mystruct_obj MyStruct var B_mystruct_obj MyStruct
Oder brauche ich hier eine Art Laufzeitpolymorphismus?
Update:
Ich habe es versucht, aber es wurde nicht einmal wie erwartet kompiliert.
https://go.dev/play/p/ioq81aexgjn
erneut aktualisiert
Ich habe es versucht und es scheint zu funktionieren. Ist das okay?
https://go.dev/play/p/r_ywzmkgrps
Es gibt zwei Probleme in Ihrem Code:
if
/else
-Klausel) nicht auf sie zugegriffen werden kann Wenn Sie das erste Problem lösen, indem Sie die Variablendeklaration nach der if
子句范围之外,以使它们可以被 if
-Anweisung in den Codezugriff verschieben:
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 }
Jetzt sind beide Variablen deklariert und beide Variablen verwenden die which-Klausel in der neu zugewiesenen mystruct
进行初始化,无论到达 if
-Anweisung.
Um dieses Problem zu lösen, ändern Sie die Variable in einen Zeiger und weisen Sie den gewünschten Wert im entsprechenden Zweig der if
-Anweisung zu:
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{} }
Bonus-Tipp: Zukünftige werden Ihnen dafür danken, dass Sie dies in ein Paar von Anweisungen umgestaltet haben. Stellen Sie fest, ob Sie a
oder b
oder beides benötigen, und vereinfachen Sie dann Ihre The Die zusammengesetzte a
或 b
或两者,然后简化您的复合 if
语句作为两个单独语句,分别初始化 a
或 b
-Anweisung fungiert als zwei
-Anweisungen und initialisiert jeweils benötigt wird. em> Erforderlich. Das obige ist der detaillierte Inhalt vonErstellen Sie eine GO-Struktur nur, wenn bestimmte Bedingungen erfüllt sind. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!a
bzw. 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{}
}
a
和/或 b
是否需要的问题与初始化 a
和 b
Wiederholen Sie sich nicht) und die Trennung von Anliegen zu vermeiden. Das heißt, trennen Sie die Frage, wann condition 2