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>


让我们一起进步学习,共同成长;欢迎大家关注微信公众号:芝麻技术栈


分享到:


相關文章: