Gibt es in Go Funktions- und Methodenüberladung wie in Java/C++?
Hallo zusammen! Ich habe gerade angefangen, Go nach Java zu lernen, und bin auf eine unverständliche Situation gestoßen. In Java bin ich es gewohnt, mehrere Methoden mit demselben Namen, aber unterschiedlichen Parametern deklarieren zu können – das nennt man Überladung (overloading). Zum Beispiel kann ich schreiben:
```java
void print(String s) { ... }
void print(int i) { ... }
void print(double d) { ... }
```
Jetzt versuche ich, dasselbe in Go zu machen:
```go
package main
func print(s string) {
fmt.Println(s)
}
func print(i int) {
fmt.Println(i)
}
func main() {
print("hello")
print(42)
}
```
Aber der Compiler gibt einen Fehler aus: `print redeclared in this block`. Ich habe versucht, das Paket umzubenennen, die Reihenfolge der Funktionen zu ändern – nichts hilft.
Ich habe gelesen, dass es in Go keine klassische Überladung gibt, aber das scheint eine sehr seltsame Einschränkung zu sein. Wie soll ich dann vorgehen, wenn ich eine Funktion benötige, die mit verschiedenen Datentypen arbeitet? Muss ich wirklich für jeden Typ einen eigenen eindeutigen Namen erfinden? Das verletzt doch das DRY-Prinzip und macht den Code