1. 第一次看到的反应
func add(x, y int) int {
return x + y
}
x 是什么类型?看起来像是漏写了。
其实没漏,这是 Go 的简写语法——相邻参数类型相同,前面的省略,只写最后一个。
和 func add(x int, y int) int 完全等价,编译结果一模一样。
2. 三个五个也一样
func sum(a, b, c int) int { return a + b + c }
func calc(a, b, c, d, e float64) float64 { ... }
连续的同类型参数,只在最后一个写类型,前面全省略。
3. 混合类型怎么办
实际开发中参数类型经常不同。按连续相同类型分组,每组各自省略:
func process(id int, name, email string, active bool) {
// id → int
// name → string(和 email 共享)
// email → string
// active → bool
}
每组只在最后一个写类型,组与组之间独立,互不影响。
4. 一个容易踩的坑
如果你想给某个参数指定跟邻居不同的类型,必须断开连接:
// 我想让 a 是 float64,b 也是 float64,c 是 int
// ❌ 这样写 a 和 b 都是 int,不是你要的
func wrong(a, b int, c float64)
// ✅ 每个都明确声明
func right(a, b float64, c int)
关键在于:逗号连接的参数共享的是紧跟在后面的那个类型。写的时候想清楚谁跟谁是一组就行。
总结
| 写法 | 适用场景 |
|---|---|
x, y int | 同类型参数多,省事 |
x int, y int | 类型混杂,写清楚更好读 |
核心原则:可读性优先。哪种写法让你三个月后还能一眼看懂,就用哪种。