Wie können generische variadische Funktionen ohne Vorlagen erreicht werden?

Linda Hamilton
Freigeben: 2024-10-26 20:09:02
Original
156 Leute haben es durchsucht

 How Can Go Achieve Generic Variadic Functions Without Templates?

Generische variadische Argumentation in Go

Go mangelt es an Vorlagen und überladenen Funktionen, aber es bietet eine Lösung, um einen Anschein einer generischen Programmierung in variadisch zu erreichen Funktionen.

Herausforderung:

Zahlreiche Funktionen mit ähnlichen Strukturen, wie zum Beispiel:

<code class="go">func (this Document) GetString(name string, defaults ...string) string {
    v, ok := this.GetValueFromDb(name)
    if !ok {
        if len(defaults) >= 1 {
            return defaults[0]
        } else {
            return ""
        }
    }
    return v.asString
}

func (this Document) GetInt(name string, defaults ...int) int {
    v, ok := this.GetValueFromDb(name)
    if !ok {
        if len(defaults) >= 1 {
            return defaults[0]
        } else {
            return 0
        }
    }
    return v.asInt
}

// etc. for various types</code>
Nach dem Login kopieren

Lösung:

Die Verwendung des Typs „Schnittstelle{}“ ermöglicht eine generische Funktion:

<code class="go">func (this Document) Get(name string, defaults ...interface{}) interface{} {
    v, ok := this.GetValueFromDb(name)
    if !ok {
        if len(defaults) >= 1 {
            return defaults[0]
        } else {
            return nil
        }
    }
    return v
}</code>
Nach dem Login kopieren

Die Funktion „GetValueFromDb“ sollte ebenfalls eine Schnittstelle{} zurückgeben. Im Client-Code können Werte mithilfe der Typzusicherung konvertiert und abgerufen werden:

<code class="go">value := document.Get("index", 1).(int) // Panics if the value is not an int</code>
Nach dem Login kopieren

oder

<code class="go">value, ok := document.Get("index", 1).(int) // ok is false if the value is not an int</code>
Nach dem Login kopieren

Obwohl dies zu einem gewissen Laufzeitaufwand führt, können die Umstrukturierung des Codes und die Trennung von Funktionen effizienter sein .

Das obige ist der detaillierte Inhalt vonWie können generische variadische Funktionen ohne Vorlagen erreicht werden?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Quelle:php.cn
Erklärung dieser Website
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn
Neueste Artikel des Autors
Beliebte Tutorials
Mehr>
Neueste Downloads
Mehr>
Web-Effekte
Quellcode der Website
Website-Materialien
Frontend-Vorlage
Über uns Haftungsausschluss Sitemap
Chinesische PHP-Website:Online-PHP-Schulung für das Gemeinwohl,Helfen Sie PHP-Lernenden, sich schnell weiterzuentwickeln!