對於go語言來說,設計最精妙的應該是interface了,直白點說interface是一組method的組合。至於更加詳細的描述,本文不做介紹,今天談談空接口。
空interface(interface{})不包含任何的method,因此所有的類型都實現了空interface。空interface在我們需要存儲任意類型的數值的時候相當有用,有點類似於C語言的void*類型。請看下面的代碼:
package main
import (
"fmt"
)
func main() {
slice := make([]interface{}, 10)
map1 := make(map[string]string)
map2 := make(map[string]int)
map2["TaskID"] = 1
map1["Command"] = "ping"
map3 := make(map[string]map[string]string)
map3["mapvalue"] = map1
slice[0] = map2
slice[1] = map1
slice[3] = map3
fmt.Println(slice[0])
fmt.Println(slice[1])
fmt.Println(slice[3])
}
這段代碼聲明了一個空接口的slice,這意味着它的值可以是任意類型,然后我們聲明了兩個map,一個是map[string]string,一個是map[string]int,然后在聲明一個map的map類型,將這三個類型賦值給slice,使得slice可以存貯各種不同類型的數據,想想看,一個可變數組中,存儲了一個key為string類型,value為int類型的map,又存儲了一個key為string類型,value為string類型的map,還存儲了一個map的map,這對c/c++轉go的程序員們來說是多么讓人吃驚。
