Go 函数基础语法
一、函数定义标准格式
Go 语言函数固定定义格式:
go
Go
func 函数名(参数列表) (返回值列表) {
函数体
}
核心规则
- 函数定义位置 :放在
main前后都可以,Go 编译器会自动识别 - 访问权限 :
- 函数名首字母小写 = 私有(只能在当前包使用)
- 函数名首字母大写 = 公共(可被其他包调用)
二、无参无返回值函数
最简单的函数形式,不需要参数,也没有返回值。
go
Go
package main
import "fmt"
// 定义无参无返回值函数
func MyFunc() {
a := 666
fmt.Println("a = ", a)
}
func main() {
// 函数调用
MyFunc()
}
三、普通参数列表(有参无返回值)
1. 基础带参函数
go
Go
// 有参无返回值
func MyFunc01(a int) {
a = 111
fmt.Println("a = ", a)
}
2. 重要概念
- 形参:定义函数时写在括号里的参数(形式参数)
- 实参:调用函数时传入的具体值
- 参数传递方向:只能实参 → 形参
- 同类型参数简写:
go
Go
// 多个相同类型参数可以只写一次类型
func test(a, b, c int) {
}
四、不定参数列表(重点)
Go 支持可变参数 ,类似其他语言的...语法。
1. 不定参数定义格式
go
Go
func 函数名(参数名 ...类型) {
}
2. 示例代码
go
Go
package main
import "fmt"
// 不定参数 int 类型
func MyFunc01(a ...int) {
// 方式1:for 循环遍历
for i := 0; i < len(a); i++ {
fmt.Printf("a[%d] = %d \n", i, a[i])
}
// 方式2:range 迭代(推荐)
for i, data := range a {
fmt.Printf("a[%d] = %d\n", i, data)
}
}
func main() {
MyFunc01() // 不传参
MyFunc01(1, 2, 3, 4) // 传多个参
}
3. 不定参数规则
- 不定参数必须放在形参列表的最后一个
- 函数内部可以把不定参数当作切片使用
五、不定参数的传递
可以把一个函数的不定参数,完整 / 切片式传递给另一个函数。
go
Go
package main
import "fmt"
func myfunc(tmp ...int) {
for _, data := range tmp {
fmt.Println("data = ", data)
}
}
func test(args ...int) {
myfunc(args...) // 全部传递
myfunc(args[:2]...) // 只传递前两个元素
}
func main() {
test(1, 2, 3, 4)
}
六、函数返回值
1. 无参有一个返回值
go
Go
// 方式1:只写返回值类型
func myfunc01() int {
return 666
}
// 方式2:给返回值起名(推荐)
func myfunc02() (result int) {
result = 666
return // 直接return即可,不用写return result
}
2. 多个返回值(Go 特色)
Go 函数支持多个返回值,是最常用的写法之一。
go
Go
// 方式1:只写类型
func myfunc01() (int, int, int) {
return 1, 2, 3
}
// 方式2:官方推荐写法(给返回值起名)
func myfunc02() (a int, b int, c int) {
a, b, c = 111, 222, 333
return
}
3. 返回值规则
- 有返回值的函数必须使用 return
- return 会中断函数执行并返回结果
- 多个返回值可以只写类型,也可以同时写变量名 + 类型
- 若已定义返回值变量,可直接
return
本章节核心总结
- 函数格式:
func 函数名(参数) (返回值) { 函数体 } - 不定参数格式:
...类型,必须放最后 - 不定参数遍历推荐用
for _, data := range 变量 - 支持多返回值,官方推荐给返回值起名
- 有返回值必须写
return - 函数名大写 = 公开,小写 = 私有
总结
函数定义、无参无返回值、普通参数、不定参数、参数传递、单返回值、多返回值,是 Go 函数最核心的第一部分知识。