函数

81 阅读2分钟

一、定义

func 函数名( [参数列表] ) [返回类型] {
   函数体
}
  • func:函数由 func 开始声明
  • 函数签名:由参数列表和返回值类型构成
  • 参数列表:参数就像一个占位符,当函数被调用时,你可以将值传递给参数,这个值被称为实际参数。参数列表指定的是参数类型、顺序、及参数个数。参数是可选的,也就是说函数也可以不包含参数
  • 返回类型:函数返回一列值,是列值的数据类型。有些功能不需要返回值,这种情况下返回类型不是必须的
  • 函数体:函数定义的代码集合

image.png

二、使用

函数本身不仅能实现自定义功能,还能作为数据类型被使用(被誉为一等公民)

image.png

声明函数的过程其实就是声明变量的过程。那么函数作为一个变量,是可以做参数传递和返回值的。由于函数的这种灵活性,让go做到了真正的函数式编程

三、参数和返回值

参数的使用

  • 不传参数
func noParams()(int,int){
	return 1,2
}
  • 传多个参数
func swap (x,y int)(int,int){
	return y,x
}
  • 参数不固定

image.png

参数的传递类型

传递类型描述
值传递值传递是指在调用函数时将实际参数复制一份传递到函数中,这样在函数中如果对参数进行修改,将不会影响到实际参数

go只有值传递,但对于引用类型(切片、map、指针等),传递的是 “地址的拷贝”,使用的引用类型的特性,而非 “引用传递” 的语法机制,需要占用空间

image.png

image.png

返回值

可以是0个、1个或者多个。命名返回值

image.png

四、匿名函数

匿名函数:没有函数名的函数

image.png

image.png

五、闭包

由 “函数” 与 “该函数创建时所处的词法作用域” 构成的组合体,核心是函数可访问其词法作用域内的自由变量,即便函数在词法作用域之外执行,这些变量仍能被持续引用且状态保持一致。简单来说,闭包=函数+引用环境(执行上下文)

image.png

image.png