Go函数必须显式声明返回类型,不支持推导;参数均为值传递,修改原值需传指针;多返回值用括号包裹;命名返回值易致隐式return和零值bug,应慎用。
函数定义必须显式声明返回类型
Go 不支持类型推导的函数返回值,func 声明里返回类型不能省略,哪怕返回 error 或空结构体也要写清楚。漏写会导致编译错误 missing function body 或 syntax error: unexpected semicolon。
常见写法示例:
func add(a, b int) int {
return a + b
}
func split(n int) (int, int) {
return n / 2, n % 2
}
func doSomething() (string, error) {
return "done", nil
}
- 多返回值必须用括号包裹,如
(int, int),不能写成int, int - 命名返回值(如
func foo() (x, y int))会让变量在函数体内自动声明,但容易掩盖未赋值 bug,慎用 - 如果函数不返回任何值,括号仍需保留:必须写
func noop() {},不能写func noop {}
参数传递是值拷贝,指针用于修改原值
Go 所有参数都是值传递——包括 slice、map、chan 和 interface{}。它们底层含指针字段,所以“看起来”能修改底层数组或哈希表,但变量本身(如 slice header)仍是拷贝。
真正需要修改调用方变量内容时,得传指针: