Avatar ·

Go 中是否有像 Java/C++ 那样的函数和方法重载?

大家好!我刚从 Java 转到 Go,遇到了一个令人困惑的情况。在 Java 中,我习惯可以声明多个同名但参数不同的方法——这叫做重载(overloading)。例如,我可以写: ```java void print(String s) { ... } void print(int i) { ... } void print(double d) { ... } ``` 现在我尝试在 Go 中做同样的事: ```go package main func print(s string) { fmt.Println(s) } func print(i int) { fmt.Println(i) } func main() { print("hello") print(42) } ``` 但编译器报错:`print redeclared in this block`。我尝试重命名包、改变函数顺序——都没用。 我读到 Go 没有经典的重载,但这似乎是一个非常奇怪的限制。那么如果我的函数需要处理不同类型的数据该怎么办?难道必须为每个类型想一个独特的名字吗?这违反了 DRY 原则,并使代