2017-10-20 5 views
1

Wenn Sie das Ergebnis einer Funktion mit 2 Rückgabewerte drucken, SieWert der Karte Retrieval

valA valB 

Abrufen von einer Karte erhalten kann entweder 1-Wert oder zwei Werte zurück:

v := m["Answer"] 
v, ok := m["Answer"] 

Wenn Sie jedoch m["Answer"] drucken, drucken Sie immer nur v. Was genau ist die "Funktionssignatur" eines Kartenabrufs? Oder ist das nur ein Sonderfall? Hier ist ein Beispiel für die Unterscheidung:

package main 

import "fmt" 

func main() { 
    m := make(map[string]int) 
    m["Answer"] = 42 

    v, ok := m["Answer"] 
    fmt.Println("The value:", v, "Present:", ok) 

    fmt.Println(banana()) 
    fmt.Println(m["Answer"]) 
} 

func banana() (int, int) { 
    return 1, 2 
} 
+3

Es ist eine besondere Aufgabe Fall, wenn es zwei Variablen auf der LHS und der Kartenindex auf der RHS. Sie können den Map-Index-Indexoperator nicht dazu veranlassen, zwei Werte auf andere Weise zurückzugeben. –

Antwort

3

Sonderfall. Das gleiche gilt für andere Operationen, unter anderem:

Lesen von chan:

v, ok := <- somechannel 

Guss, zB:

casted, ok := somevar.(sometype) 
+3

Auch Bereichs-Loops 'für i: = Bereich x' und' für i, v: = Bereich x' – Kaedys