GO語言基礎知識(三)map的常見操作以及常見類型的函數舉例

一、map的常見操作

map 結構

語法:map[KeyType]ValueTyp

初始化 make(map[KeyType]ValueType,cap)可以選擇指定cap

<code>//初始化map
testMap1 := make(map[string]string)
testMap1 = map[string]string{
"key0":"value0",//也可以聲明的同時直接填充值
"key5":"value5",
}
fmt.Println(testMap1)//map[key0:value0 key5:value5]
//增
testMap1["key1"]="value1"
testMap1["key2"]="value2"
testMap1["key3"]="value3"
//刪
delete(testMap1, "key5")
//查
fmt.Printf("key2->%v\\n",testMap1["key2"])//key2->value2
fmt.Printf("key5->%v\\n",testMap1["key5"])//key5->
//判斷K是否存在
key := "key5"
value,ok:=testMap1[key]
if !ok{
fmt.Printf("%s不存在\\n",key)
}else {
fmt.Printf("%s->%s",key,value)
}
//遍歷
for k,v:= range testMap1{
fmt.Printf("%s->%v\\n",k,v)
}/<code>

二、常見類型的函數舉例

函數的定義(語法格式)以及常見的函數變種:

func name(param)(return_value){

method body

}

  • 無返回值
<code>func print(n int)  {  
fmt.Println(n)
}/<code>
  • 如果返回值未指定變量;用return 返回值
<code>func add(n int,b int)int {  
return n+b
}/<code>
  • 當參數類型一樣時可以簡寫當為返回值指定變量名字時可以直接賦值然後return
<code>func add_(n,b int) (result int){  
result=n+b //直接給返回值賦值
return
}/<code>
  • 可變參數,不定參數只能放在最後,多返回值是GO語言的一大特色返回值未指定變量;用return 多返回值之間用,分隔
<code>func uncertain(names...string)(string,bool){  
if names==nil{
return "", false
}  
return strings.Join(names," "),true //字符串拼接功能}/<code>
  • 聲明一種類型,函數類型

只要是傳入兩個int參數一個int返回值的函數都符合這種類型

比如上面的函數add就符合

<code>type fromToOne func(a,b int)int
var funcVar fromToOne = add/<code>
  • 函數作為參數
<code>func funcParam(fun func(a,b int)int,a,b int) int {  
return fun(a,b)
}/<code>
  • 上面的函數作為參數的函數可以簡寫成自定義類型作為參數
<code>func funcParam2(fun fromToOne,a,b int)int  {  
return fun(a,b)
}/<code>
  • 函數作為返回值
<code>func funcReturn(ok bool)func(int,int)int  {  
if ok{
return func(i int, i2 int) int {//聲明一個匿名函數
return i+i2
}
}else{
return add
}
}/<code>
  • 匿名函數賦給變量使用
<code>var anonymousFunc = func(n int){  
fmt.Println("我是匿名函數",n)
}/<code>


  • 匿名函數立即執行
<code>func (n int){    
fmt.Println("匿名函數立即執行",n)
}(2)/<code>
  • 匿名函數的最重要的應用就是閉包

閉包持有對外部作用域變量的引用,在閉包的生命週期內這種引用保持不變

<code>func closureFunc(a int)func(int)int {  
return func(b int)(r int) {
r=a+b
a = b
return

}
}/<code>
<code>var closureVar = closureFunc(1)
fmt.Println(closureVar(2))//3
fmt.Println(closureVar(6))//8/<code>
  • defer語句

一般是自執行的匿名函數體,在函數最後結束時執行;多個defer按逆序執行

defer語句的執行時機(after返回值賦值,before return)

<code>當參數傳1的時候,返回值就是4
func deferT(a int)(r int) {
defer func() {
fmt.Println("defer 執行了")
r+=2
}()
fmt.Println("函數執行完了")
return a+1
}/<code>


讓我們一起進步學習,共同成長;歡迎大家關注微信公眾號:芝麻技術棧


分享到:


相關文章: