一、什么是函数?
函数(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全栈开发完整课程