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