Go函数

Go函数

Go函数

定义

func name(params)(return params){
function body
}
//eg,如果相邻的参数类型是相同的,则可以省略前一个类型
func cal(a,b int) int{
  return a+b;
}
//可以对返回值进行命名,注意需要显式调用return语句进行返回
func div(dividend,divsor int)(quotient,remainder int){
  quotient=dividend/divsor
  remainder=dividend%divsor
  return
}
//注意返回参数不能一个命名,一个不命名,只能选一种方式
func div2(dividend, divsor int) ( int, int) {
    quotient := dividend / divsor
    remainder := dividend % divsor
    return quotient, remainder
}
//报错,error前没有返回参数名
//func myFunc(x,y int)(sum int,error){
//    return x+y,nil
//}

匿名函数

//在声明之后可以直接调用    
func(name string) {
  fmt.Println(name)
}("ss")
//赋值给给函数类型的变量
namePrint:=func(name string) {
  fmt.Println(name)
}
namePrint("ss")

使用匿名函数作为回调函数

func proc(input string,processor func(str string)){
  processor(input)
}
func main(){
  proc("王小二",func(str string){
    fmt.Print(str)
  }
  )
}

闭包

闭包是携带状态的函数,它是将函数内部和函数外部连接起来的桥梁。通过闭包,我们可以读取函数内部的变量。

func createCounter(ini int)func() int{
  return func() int{
    ini++;
    return ini;
  }
}
func main(){
  c1:=createCounter(1)
  fmt.Print(c1())//2
  c2:=createCounter(10)
  fmt.Print(c2())//11
  fmt.Print(c1())//3
}

   转载规则


《Go函数》 朱林刚 采用 知识共享署名 4.0 国际许可协议 进行许可。
 上一篇
Go 三个点...语法使用 Go 三个点...语法使用
Go 三个点…语法使用变长的函数参数函数有多个不定参数的情况,可以接受多个不确定数量的参数。 如果最后一个函数参数的类型的是…T,那么在调用这个函数的时候,我们可以在参数列表的最后使用若干个类型为T的参数。这里,…T在函数内部的类型实际是
2021-12-04
下一篇 
Go内存逃逸 Go内存逃逸
Go内存逃逸Go内存逃逸简单来说就是原本应在栈上分配内存的对象,逃逸到了堆上进行分配。如果能在栈上进行分配,那么只需要两个指令,入栈和出栈,GC压力也小了。所以相比之下,在栈上分配代价会小很多。 go语言编译器会自动决定把一个变量放在栈还是
2021-11-18
  目录