一、什么是函数?
函数(Function)是封装好的一段可以被重复调用的代码块。 它可以 接收输入(参数),返回输出(返回值)。
函数的核心作用
-
封装:把复杂的逻辑打包成一个名字,方便复用。
-
抽象:隐藏实现细节,只暴露输入输出。
-
组织代码:让程序结构更清晰。
二、函数的基本结构
Go语言的函数定义格式是:
func 函数名(参数列表) (返回值列表) {
// 函数体
}
关键词解析:
-
func:声明一个函数。 -
函数名:函数的名字,首字母大写表示可被其他包访问。 -
参数列表:传给函数的输入,可以是多个。 -
返回值列表:函数执行完返回的值,也可以是多个。 -
{}:代码块,写具体执行内容。
三、简单例子:定义并调用函数
package main
import "fmt"
// 定义一个函数
func sayHello() {
fmt.Println("Hello, world!")
}
func main() {
// 调用函数
sayHello()
}
说明:
-
sayHello没有参数,也没有返回值。 -
main是程序的入口,调用sayHello()。
四、带参数的函数
定义带参数的函数:
func greet(name string) {
fmt.Println("Hello,", name)
}
调用:
greet("Tom")
解释:
-
name string:定义了一个名为name的参数,类型是string。 -
调用时传一个实际的字符串,比如"Tom"。
五、带返回值的函数
定义带返回值的函数:
func add(a int, b int) int {
return a + b
}
调用:
sum := add(3, 5) fmt.Println(sum) // 输出8
注意:
-
int是返回值类型。 -
return用于返回结果。
六、多个返回值
Go语言的函数可以返回多个值!
func swap(x, y string) (string, string) {
return y, x
}
调用:
a, b := swap("hello", "world")
fmt.Println(a, b) // world hello
应用场景:
-
返回结果+错误信息
-
同时返回多个计算结果
七、命名返回值
可以直接给返回值起名字,省略return后面要写的变量名。
func split(sum int) (x, y int) {
x = sum * 4 / 9
y = sum - x
return
}
说明:
-
(x, y int)是带名字的返回值。 -
return时可以不写变量,默认返回x和y。
八、可变参数(变长参数)
有时候参数数量不固定,可以用...类型表示可变参数。
func sum(nums ...int) int {
total := 0
for _, num := range nums {
total += num
}
return total
}
调用:
result := sum(1, 2, 3, 4, 5) fmt.Println(result) // 输出15
注意:
-
nums其实是一个[]int切片。
九、匿名函数(函数表达式)
Go支持没有名字的函数,叫匿名函数。 可以直接定义后使用。
func() {
fmt.Println("Anonymous function")
}()
或者赋值给变量:
f := func(a int, b int) int {
return a + b
}
fmt.Println(f(3, 4)) // 输出7
十、函数作为参数和返回值
Go的函数可以作为参数传入,也可以作为返回值返回。
func operate(a int, b int, op func(int, int) int) int {
return op(a, b)
}
func add(a int, b int) int {
return a + b
}
func main() {
result := operate(3, 4, add)
fmt.Println(result) // 输出7
}
说明:
-
operate接收一个op参数,类型是func(int, int) int。 -
传入
add函数作为参数。
十一、延迟执行(defer)
defer语句用于延迟执行,在函数结束前自动调用。
func main() {
defer fmt.Println("world")
fmt.Println("hello")
}
输出顺序:
hello world
应用场景:
-
释放资源(比如关闭文件、释放锁)
👉 立即点击链接,开启你的全栈开发之路:Golang全栈开发完整课程
2827

被折叠的 条评论
为什么被折叠?



