函数
基本概念
函数的定义
函数可以没有参数以及返回值
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定义的函数将会在函数语句之后返回之前执行,如下代码运行的结果为
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后")
}
闭包
闭包可以利用返回的匿名函数修改函数体中的变量值,如下代码所属
每次执行a方法则a会自增 + 1
func test() func() {
a := 20
fmt.Println(a)
return func() {
a++
fmt.Println(a)
}
}
func main() {
a := test()
a()
a()
}
闭包是为了减少全局变量,在函数调用的时候共享全局变量,但是这种方式不够直接清晰,一般不建议使用。
虽然道路是曲折的,但前途是光明的。
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 震惊!C++程序真的从main开始吗?99%的程序员都答错了
· 单元测试从入门到精通
· 【硬核科普】Trae如何「偷看」你的代码?零基础破解AI编程运行原理
· 上周热点回顾(3.3-3.9)
· winform 绘制太阳,地球,月球 运作规律