函数

基本概念

函数的定义

函数可以没有参数以及返回值

func 函数名称([参数类型1], [参数类型2]) [返回值] {
	函数体
	
	return 返回内容
}
func add(a int, b int) int {
	fmt.Printf("a:%d\tb:%d\t", a, b)

	return a * b
}

多值返回

可以在定义返回参数时利用括号来设置多值返回值的类型,返回时根据定义的顺序将值返回即可,使用时也根据返回值顺序并以逗号分割即可。

func swap(a int, b int) (int, int) {
	return b, a
}

func main() {
	a, b := swap(20, 12)

	fmt.Print(a)
	fmt.Print(b)
}

不定参数

在定义函数时可以在函数体中以变量名称 ... 变量类型的方式定义不定参数
需要注意的是不定参数必须位于最后一个参数且不定参数的类型都是相同的。

func add(arr ...int) {
	for i := 0; i < len(arr); i++ {
		fmt.Print(arr[i])
	}
}

func main() {
	add(1, 2, 3, 4, 5)
}

匿名函数

可以定义函数赋值到变量中,之后调用调用变量(参数)就可以调用匿名函数了,匿名函数可以作为返回值、参数和变量来使用。


	a := func(student Student) {
		fmt.Println(student)
	}

	a(lyra)

defer

defer定义的函数将会在函数语句之后返回之前执行,如下代码运行的结果为
image

	fmt.Println("defer前")
	defer func() {
		a := 20
		fmt.Println(a)
	}()
	fmt.Println("defer后")

可以定义参数并在后面那个小括号中进行赋值

func main() {
	fmt.Println("defer前")
	defer func(a int) {
		fmt.Println(a)
	}(20)
	fmt.Println("defer后")
}

image

闭包

闭包可以利用返回的匿名函数修改函数体中的变量值,如下代码所属
每次执行a方法则a会自增 + 1

func test() func() {
	a := 20
	fmt.Println(a)

	return func() {
		a++
		fmt.Println(a)
	}
}

func main() {
	a := test()
	a()
	a()

}

闭包是为了减少全局变量,在函数调用的时候共享全局变量,但是这种方式不够直接清晰,一般不建议使用。

posted @   RainbowMagic  阅读(31)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· 震惊!C++程序真的从main开始吗?99%的程序员都答错了
· 单元测试从入门到精通
· 【硬核科普】Trae如何「偷看」你的代码?零基础破解AI编程运行原理
· 上周热点回顾(3.3-3.9)
· winform 绘制太阳,地球,月球 运作规律
点击右上角即可分享
微信分享提示