map:映射,使用散列表(hash)實現
map[keyType]valueTypehtml
var a map[string]int var a map[string]int //defaule nil fmt.Println(a==nil) //init make(map,cap) a = make(map[string]int,10) a["一"] = 1 a["二"] = 2 a["四"] = 4 a["五"] = 5 fmt.Println(a) fmt.Printf("a:%#v\n",a) b := map[int]bool { 1 : true, 2 : false, } fmt.Printf("b:%#v\n",b)
// 探測是否存在map[key] f,ok := a["三"] fmt.Println(f,ok) //ok == true
map默認是無序的,怎麼讓它按必定的順序操做呢c++
//用slice取key keys := make([]string,0,100) for k := range c { keys = append(keys,k) } //key排序 sort.Strings(keys) for _,key := range keys { fmt.Println(key,c[key]) }
有點繞口的兩個東西,想起了c++的指針常量和常量指針..閉包
//mapslice //init slice,then init map var mapSlice = make([]map[string]int,8,8) mapSlice[0] = make(map[string]int,10) mapSlice[0]["hello"] = 1 fmt.Println(mapSlice) //slicemap //init map, then init slice var sliceMap = make(map[string][]int,10) sliceMap["hello"] = make([]int,0,10) sliceMap["hello"] = append(sliceMap["hello"],1,2,3,4,5) fmt.Println(sliceMap)
map 東西還挺多的哈app
func name() (return) { //左大括號必定要寫在同一行,否則無效
}函數
func intSum(x int, y int) int { return x+y } //可變參數(...) func intsum2(a ...int) int { ret := 0 for _,i := range a { ret += i } return ret } //go 的函數能夠return 多個值 func calc(a,b int) (sum ,sub int) { return a+b,a-b } //函數也可作參數 func compute(x,y int,op func(int,int) int) int { return op(x,y) } //函數alias? abc := calc x,y := abc(1,2) //匿名函數:直接寫在調用的地方 func() { fmt.Println("Anonymous Function") }() //記得加()表示當即調用
引用大佬的話:閉包 = 函數 + 環境(外層變量的引用)this
//閉包 = 函數 + 環境 //func return func func a() func() { str := "閉包" return func(){ fmt.Println("this is a ",str) } } func main() { r := a() r() }
//再來個複雜點的 func makeSuffixFunc(suffix string) func(string) string { return func(name string) string { if !strings.HasSuffix(name,suffix) { return name + suffix } return name } }
Talk is Cheap , Show me the Code指針
學到的感到的都在代碼和註釋裏了。
今天,就先寫到這裏吧,結構體的內容還沒學完,明天再一次性發。
那麼,人生苦短,朋友,Let's GO!code