Let's GO(二)

人生苦短,Let's GO

今天我學了什麼?

1. Map

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

2.函數

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")
	}() //記得加()表示當即調用

3.閉包

引用大佬的話:閉包 = 函數 + 環境(外層變量的引用)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

相關文章
相關標籤/搜索