Obwohl Go möglicherweise keine inhärente Unterstützung für generische Programmierung oder Funktionsüberladung bietet, ermöglicht es ein gewisses Maß an Flexibilität beim Umgang mit Variadic Funktionen.
Stellen Sie sich das häufige Szenario vor, in dem Sie über mehrere Funktionen wie die folgenden verfügen:
<code class="go">func (this Document) GetString(name string, defaults ...string) string { // ... Function implementation } func (this Document) GetInt(name string, defaults ...int) int { // ... Function implementation }</code>
Bei diesen Funktionen kann es zu Codeduplizierungen kommen. Gibt es eine Möglichkeit, diese Redundanz zu minimieren?
Ja, obwohl es in Go keine generischen Vorlagen gibt, können Sie interface{} nutzen, um eine generische Lösung bereitzustellen.
<code class="go">func (this Document) Get(name string, defaults ...interface{}) interface{} { // ... Function implementation // This function returns `interface{}` instead of specific types. }</code>
Dieser Ansatz ermöglicht Ihnen die Interaktion mit der Funktion auf folgende Weise:
<code class="go">value := document.Get("index", 1).(int) // Type casting is required</code>
Wenn Sie Nullwerte bevorzugen, können Sie diesen Ansatz verwenden:
<code class="go">value, ok := document.Get("index", 1).(int) // Returns `ok` to indicate type compatibility</code>
Dieser Ansatz kann jedoch zu Laufzeitaufwand führen. Es ist ratsam, Ihre Codestruktur zu bewerten und festzustellen, ob separate Funktionen oder eine andere Lösung für Ihre spezifischen Anforderungen besser geeignet sind.
Das obige ist der detaillierte Inhalt vonKönnen die variadischen Funktionen von Go allgemeiner gestaltet werden?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!