Wie funktioniert aufschieben und named return value arbeiten in golang?

Ich gerade angefangen zu lernen, golang und ich war verwirrt mit einem Beispiel über die Verwendung aufzuschieben, zu ändern named return value in der golang blog-post hier.

Beispiel sagt:

  1. Latente Funktionen Lesen und zuordnen, um die Rückkehr-Funktion benannt, die Werte zurückgeben.

In diesem Beispiel, eine latente Funktion erhöht den return-Wert, den ich nach dem umliegenden Funktion gibt. So, diese Funktion gibt 2:

func c() (i int) {
    defer func() { i++ }()
    return 1
}

Aber als das, was ich gelernt habe, aus Eine Tour von Go - Namens return-Werte

Eine return-Anweisung ohne Argumente gibt den Namen, die Werte zurückgeben. Dies ist bekannt als "nackt" zurück.

Getestet habe ich in folgenden code und in Funktion b es gibt 1 zurück, denn es war nicht das Eine return-Anweisung ohne Argumente oben genannten Fall.

func a() (i int) { //return 2
    i = 2
    return
}

func b() (i int) {  //return 1 
    i = 2
    return 1
}

Also meine Frage ist in dem ersten Beispiel, die umliegenden Funktion c hat eine named return value ich, aber die Funktion c verwendet return 1, die im zweiten Beispiel können wir sehen, es sollte wieder 1, egal welchen Wert ich ist. Aber warum, nachdem ich änderungen in der latenten Funktion der c-Funktion gibt den Wert von i, statt den Wert 1?

Als ich getippt meine Frage, die ich vielleicht erraten haben, die Antwort. Ist es, weil

return 1 

ist gleich

i = 1
return 

in eine Funktion mit einem named return value variable i ?

Helfen Sie mir bitte bestätigen, danke!

InformationsquelleAutor Lution | 2016-05-16

Schreibe einen Kommentar