價值

2017-10-20 41 views
1

當您打印2個返回值的函數的結果,你會得到價值

valA valB 

從地圖檢索可以返回1倍的值或者兩個值:

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

但是,當您打印m["Answer"]時,您將始終只打印v。什麼是地圖檢索的「函數簽名」?或者這只是一個特例?下面是一個顯示區別的示例:

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

這是當有在LHS兩個變量的特殊任務情況和RHS上的地圖索引。您無法讓地圖索引索引運算符以任何其他方式返回兩個值。 –

回答

3

特殊情況。這同樣適用於其他操作,其中包括:

讀取從chan

v, ok := <- somechannel 

鑄件,如:

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

另外,範圍循環對於i:=範圍x'和'對於i,v:=範圍x' – Kaedys