函数声明
声明一个函数的格式如下:
func function_name ([parameter]) [return_type] {
}
其中,参数为可选值;当且仅当函数没有返回值时,不标明返回值类型。
函数可以作为一个变量来声明,即可以使用 var 关键字或赋值操作符 ":=" 来定义函数变量。方法如下:
var function_name func([parameter]) return_type
function_name := func ([parameter]) [return_type] {
}
函数的参数
在默认的情况下,参数为值传递,即形式参数,修改形参不对实参造成影响。与C语言类似,可以利用指针的形式传递参数,使其变为引用传递。
函数的返回值
函数可以拥有多个返回值,并在return处按序返回。
函数方法
当函数的参数为结构体/命名类型时,可以将该函数视作结构体对象的方法,可以调用结构体对象的属性。
函数闭包
Go语言通过匿名函数来实现函数闭包。闭包函数即某代码块定义于另一代码块的内部。具体理解可以参见Javascript 函数闭包。在Go语言中,闭包函数可以使用定义所在的代码块中所声明的外部变量而无需关注可访问性。当外部函数创建后,形成闭包;外部函数的返回值,即身为匿名函数的闭包函数。当调用外部函数时,实质上是获取外部函数的返回值,即内部匿名函数。示例如下:
package main
import "fmt"
func getSequence() func() int {
i:=0
return func() int {
i+=1
return i
}
}
func main(){
/* nextNumber 为一个函数,函数 i 为 0 */
nextNumber := getSequence()
/* 调用 nextNumber 函数,i 变量自增 1 并返回 */
fmt.Println(nextNumber()) /*1*/
fmt.Println(nextNumber()) /*2*/
fmt.Println(nextNumber()) /*3*/
/* 创建新的函数 nextNumber1,并查看结果 */
nextNumber1 := getSequence()
fmt.Println(nextNumber1()) /*1*/
fmt.Println(nextNumber1()) /*2*/
}
range关键字
Go 语言中 range 关键字用于 for 循环中迭代数组(array)、切片(slice)、通道(channel)或集合(map)的元素。在数组和切片中它返回元素的索引和索引对应的值,在集合中返回 key-value 对的 key 值。
网友评论