GO语言的函数特色和函数闭包

89 阅读2分钟

携手创作,共同成长!这是我参与「掘金日新计划 · 8 月更文挑战」的第23天,点击查看活动详情

函数

函数是程序开发中重要的组成部分,我们一般将一段需要重复调用的一段相同功能的代码抽象成一个函数。这样同时也减少了代码的耦合性,是一个开发者的基本技能。

GO语言函数特色:

GO语言倡导的是极简风格,从它的语法中便可以看出。

函数语法

func name(parameter...)[return list]{
    函数体
}
//func:定义函数的关键字
//name:函数名称
//parameter:参数,0个及以上
//return list:返回值类型,0个及以上
  • 举例:
//实现一个累加函数
func addSum(min int,max int)int{
     for i:=min;i<=max,i++{
      sum:=sum+i
     }
     return sum
}
//主函数
func main(){
  a,b:=2,10
  fmmt.Printf("a---b累加结果:%v")
}

当我们使用多态、继承等方法时,我们只需在函数名前声明实例化多态的结构体类型。

  • 举例(多态)
//定义一个文具的接口
type stationery interface{
     study()  
}
//定义一个pen的struct
type pen struct{
   name string
}
//定义一个book的struct
type book struct{
name string
}
// 在函数名前加 (p *pen)
func(p *pen)study(){
     fmt.Println("写字",p.name)
 }
 //
 func (b book)study(){
 fmt.Println("做笔记",b.name)
 }

/接收一个stationery接口类型的值,如果一个实体类型实现了该接口,
//sendNotify函数会根据实体类型的值类执行stationery接口的study行为,这个函数具有多态的能力。
 func sendStationery(s stationery){
    s.study()
 }

函数闭包

函数闭包也叫做匿名函数,这对取名纠结症的程序员非常的友好,不用把脑细胞浪费在函数名上。

  • 简单的例子:
//这便是一个匿名函数实现乘法运算,匿名函数有小括号表示调用该函数
  a :=func(b,c int)int{
     return b*c
  }(11,9)
 

匿名函数还可以作为函数原型,调用函数原型,可以实现不同的功能。

  • 举例
//
func add(a,b)int{
    return a+b
}

func chengFa(a,b)int{
    return a*b
}

我们发现,如果使用匿名函数,它们的函数原型都是func(a,b int int){} 因此我们可以创建一个函数来调用这个原型。

func addChengFa(a,b int , f func(a,b)int)int{
    return f(a,b)
}

调用方式

  addChengFa(10,11,add) //10+11
  addChengFa(10,11,chengFa)//10*11