Heim  >  Artikel  >  Backend-Entwicklung  >  Erstellen Sie eine GO-Struktur nur, wenn bestimmte Bedingungen erfüllt sind

Erstellen Sie eine GO-Struktur nur, wenn bestimmte Bedingungen erfüllt sind

WBOY
WBOYnach vorne
2024-02-08 21:05:49989Durchsuche

仅当满足特定条件时才创建 GO 结构

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.

Frageninhalt

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


Richtige Antwort


Es gibt zwei Probleme in Ihrem Code:

  1. Ihre Variablen werden in einem umschließenden Bereich deklariert, sodass von außerhalb dieses Bereichs (if/else-Klausel) nicht auf sie zugegriffen werden kann
  2. Ihre Variablen werden als Werte deklariert

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 ab 或两者,然后简化您的复合 if 语句作为两个单独语句,分别初始化 ab-Anweisung fungiert als zwei

separate

-Anweisungen und initialisiert jeweils 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{}
    }
Der Zweck besteht darin, logische Duplizierungen (trockenes Prinzip: a 和/或 b 是否需要的问题与初始化 abWiederholen Sie sich nicht

) und die Trennung von Anliegen zu vermeiden. Das heißt, trennen Sie die Frage, wann

benötigt wird. em> Erforderlich. condition 2

Hinweis: Es ist nicht möglich, genauer zu sagen, wie 🎜 ausgedrückt werden soll, da aus dem von Ihnen geposteten Code nicht klar hervorgeht, um welche Bedingung es sich handelt. 🎜

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!

Stellungnahme:
Dieser Artikel ist reproduziert unter:stackoverflow.com. Bei Verstößen wenden Sie sich bitte an admin@php.cn löschen