Heim > Backend-Entwicklung > Golang > So gehen Sie mit dem Problem zu vieler Rückgabewerte in Golang um

So gehen Sie mit dem Problem zu vieler Rückgabewerte in Golang um

王林
Freigeben: 2019-12-24 15:26:05
Original
2760 Leute haben es durchsucht

So gehen Sie mit dem Problem zu vieler Rückgabewerte in Golang um

Mehrere Werte zurückgeben

Eine ganz besondere Funktion von Go (für eine kompilierte Sprache) ist, dass Funktionen und Methoden mehrere Werte zurückgeben können (Python und Perl funktionieren auch).

Dies kann verwendet werden, um viele schlechte Konventionen in C-Programmen zu verbessern: Parameter so zu ändern, dass ein Fehler zurückgegeben wird (z. B. Rückgabe von -1 bei EOF). In Go gibt Write einen Zählwert und einen Fehler zurück: „Ja, Sie haben einige Bytes geschrieben, aber aufgrund einer Geräteausnahme wurden nicht alle geschrieben.“

*File.Write im OS-Paket wird wie folgt deklariert:

func (file *File) Write(b []byte) (n int, err error)
Nach dem Login kopieren

Wie in der Dokumentation angegeben, wird die Anzahl der geschriebenen Bytes zurückgegeben, und wenn n != len(b) , wird zurückgegeben ein Nicht-Null-Fehler. Dies ist ein gängiger Ansatz in Go. Tupel werden nicht als native Typen angezeigt, daher sind mehrere Rückgabewerte möglicherweise die beste Wahl. Sie können genau den gewünschten Wert zurückgeben, ohne den Feldbereich mit einem bestimmten Fehlersignal überlasten zu müssen.

Benannte Rückgabewerte

Dem Rückgabewert oder Ergebnisparameter einer Go-Funktion kann ein Name zugewiesen und wie eine Originalvariable, genau wie ein Eingabeparameter, verwendet werden. Wenn sie benannt sind, werden sie zu Beginn der Funktion mit dem Nullwert ihres Typs initialisiert. Wenn die Funktion die Return-Anweisung ausführt, ohne Parameter hinzuzufügen, werden die Ergebnisparameter zurückgegeben. Durch die Verwendung dieser Funktion können Sie (wieder) mit weniger Code mehr erreichen.

Namen sind nicht obligatorisch, aber sie können den Code robuster und klarer machen: Hier ist die Dokumentation. Beispielsweise kann die Benennung des nextPos-Rückgabewerts vom Typ int angeben, welcher welchen darstellt

func nextInt(b []byte, pos int) (value, nextPos int) { /* ... */ }
Nach dem Login kopieren

Da die benannten Ergebnisse initialisiert und mit der unveränderten Rückgabe verknüpft werden, können sie sehr einfach und klar sein. Hier ist ein Teil des io.ReadFull-Codes, der sehr gut verwendet wird:

func ReadFull(r Reader, buf []byte) (n int, err error) {
    for len(buf) > 0 && err == nil {
        var nr int
        nr, err = r.Read(buf)
        n += nr
        buf = buf[nr:len(buf)]
    }
    return
}
Nach dem Login kopieren

Empfohlene verwandte Artikel und Tutorials: Golang-Tutorial

Das obige ist der detaillierte Inhalt vonSo gehen Sie mit dem Problem zu vieler Rückgabewerte in Golang um. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Verwandte Etiketten:
Quelle:php.cn
Erklärung dieser Website
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn
Beliebte Tutorials
Mehr>
Neueste Downloads
Mehr>
Web-Effekte
Quellcode der Website
Website-Materialien
Frontend-Vorlage