2016-08-18 7 views
0

Gibt es einen Weg, um einer Funktion zwei Variablen zuzuweisen, die zwei Werte zurückgibt, wenn eine Variable deklariert ist und die andere nicht.Golang-Variablenzuweisung

Zum Beispiel:

var host string 
if host, err := func(); err != nil {} 

In dem obigen Code wird Host erklärt aber err nicht. Ich möchte eine saubere Möglichkeit, dies zu tun, außer zu erklären

+0

Ziemlich sicher, dass es das automatisch macht. : = wenn es eine neue Variable gibt, = wenn beide existieren. – Puzzle84

+0

Wenn die zweite Anweisung eine if/for-Anweisung ist. Wird die deklarierte Variable "host" den von func() zurückgegebenen Wert enthalten? – Keeto

+0

Kurze Antwort ist, was Sie fragen, ist nicht möglich. Sie müssen auch 'err' deklarieren. – Endophage

Antwort

5

In Ihrem Beispiel sollten Sie einfach Host nicht deklarieren. Es gibt keine Möglichkeit, so eine Teilzuteilung zu machen ... Entweder du verwendest :=, was eine kurze Hand für Deklaration und Zuweisung ist, oder du verwendest = und du machst nur eine Aufgabe. Ich persönlich schreibe sehr selten das Wort var in Go.

Um klar zu sein, wenn Sie eine Variable haben, die bereits mit einem oder mehreren deklariert wurde, die nicht haben, können Sie := zuweisen, aber die Umkehrung ist nicht wahr. Das bedeutet, dass Sie = nicht verwenden können, wenn ein oder mehrere Werte auf der linken Seite nicht bereits deklariert wurden.

+0

Wenn die zweite Aussage ist ein If/For Erklärung. Wird die deklarierte Variable "host" den von func() zurückgegebenen Wert enthalten? – Keeto

+0

@Keeto es wird, aber wenn Sie das tun, wird 'Host' nur im Rahmen des' if' verfügbar sein. Hier ist ein Beispiel für das Spiel. https://play.golang.org/p/3ONeB2D6kH Wie Sie sehen können, ist Host nicht in Umfang außerhalb der Wenn. – evanmcdonnal

1

Wenn Sie := in einer if so verwenden, erhalten Sie immer neue Variablen im Bereich der if deklariert. Nach dem if wird der Wert host der gleiche wie zuvor sein. Wenn Sie dies tun möchten, müssen Sie sowohl host als auch err vor dem if deklarieren (und nicht := im if).