Heim  >  Artikel  >  Backend-Entwicklung  >  So definieren Sie in Golang mehrere Typen als einen Typ

So definieren Sie in Golang mehrere Typen als einen Typ

WBOY
WBOYnach vorne
2024-02-09 10:03:19601Durchsuche

So definieren Sie in Golang mehrere Typen als einen Typ

In Golang müssen wir manchmal mehrere Typen als einen Typ definieren, um Daten flexibler verarbeiten zu können. Für dieses Problem bietet der PHP-Editor Xinyi für jeden eine Lösung. Durch die Verwendung von Schnittstellentypen können wir mehrere verschiedene Typen als einen Typ definieren. Ein Schnittstellentyp kann eine Reihe von Methoden definieren, ohne eine bestimmte Implementierung anzugeben. Auf diese Weise können wir diese Schnittstelle für mehrere Typen implementieren und diesen Schnittstellentyp dann für einheitliche Vorgänge und Verarbeitungen verwenden. Dieser Ansatz vereinfacht nicht nur die Codestruktur, sondern verbessert auch die Lesbarkeit und Wartbarkeit des Codes. Schauen wir uns als Nächstes die konkreten Umsetzungsschritte an!

Frageninhalt

func GetFailedReasonAndErr (xxx) (string, error){
...
}

func AnyFailed (args ...(string, error)) {
   for _, arg := range args {
      if arg.error != nil {
         return arg
       }
   }
}

func main () {
    reason, err := AnyFailed(GetFailedReasonAndErr(yyy), GetFailedReasonAndErr(zzz))
    println(reason, err)
}

Der obige Code kann nicht kompiliert werden, da „args ...(string, error)“ nicht zulässig ist. Kann ich (String, Error) als Typ definieren? Oder einen besseren Weg? (Kann ich Strukturen verwenden?) wie : Typ reasonanderror(String, Error)

Workaround

Kann ich (String, Error) als Typ definieren?

Nein, diese Syntax wird nicht verwendet. go hat keine Tupel.

(Können Sie eine Struktur verwenden?) Zum Beispiel: Geben Sie reasonanderror (string, error) ein

Ja, deklarieren Sie einen Strukturtyp und verwenden Sie ihn. Die Syntax zum Deklarieren eines Strukturtyps lautet wie folgt:

type reasonanderror struct {
    reason string
    err    error
}

Um es dann zu verwenden, gehen Sie wie folgt vor:

func GetFailedReasonAndErr(xxx) reasonAndError {
    // ...
}

func AnyFailed(args ...reasonAndError) (string, error) {
   for _, arg := range args {
      if arg.err != nil {
         return arg.reason, arg.err
       }
   }
   return "", nil
}

func main () {
    reason, err := AnyFailed(GetFailedReasonAndErr(yyy), GetFailedReasonAndErr(zzz))
    println(reason, err)
}

Das obige ist der detaillierte Inhalt vonSo definieren Sie in Golang mehrere Typen als einen Typ. 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