Go tem sobrecarga de funções e métodos como em Java/C++?
Olá a todos! Acabei de começar a estudar Go depois de Java e me deparei com uma situação confusa. Em Java, estou acostumado a declarar vários métodos com o mesmo nome, mas com parâmetros diferentes — isso é chamado de sobrecarga (overloading). Por exemplo, posso escrever:
```java
void print(String s) { ... }
void print(int i) { ... }
void print(double d) { ... }
```
Agora estou tentando fazer o mesmo em Go:
```go
package main
func print(s string) {
fmt.Println(s)
}
func print(i int) {
fmt.Println(i)
}
func main() {
print("hello")
print(42)
}
```
Mas o compilador dá um erro: `print redeclared in this block`. Tentei renomear o pacote, mudar a ordem das funções — nada resolve.
Li que Go não tem sobrecarga clássica, mas isso parece uma limitação muito estranha. Como fazer então, se preciso que uma função funcione com diferentes tipos de dados? Será que preciso inventar um nome único para cada tipo? Isso viola o princípio DRY e torna o código...