Heim > Backend-Entwicklung > Golang > Gegenbeispiele, die gegen Best Practices für Golang-Funktionen verstoßen

Gegenbeispiele, die gegen Best Practices für Golang-Funktionen verstoßen

王林
Freigeben: 2024-05-03 12:18:01
Original
648 Leute haben es durchsucht

Das Befolgen funktionaler Best Practices ist von entscheidender Bedeutung. Vermeiden Sie die folgenden Gegenbeispiele: Übermäßig lange Funktionen. Funktionen ohne Dokumentzeichenfolgen Um qualitativ hochwertigen Code in einer Sprache zu erhalten, ist es wichtig, funktionale Best Practices zu befolgen. Wenn Sie die folgenden Gegenbeispiele vermeiden, können Sie wartbare, lesbare und effiziente Funktionen schreiben.

Gegenbeispiele, die gegen Best Practices für Golang-Funktionen verstoßen1. Zu lange Funktionen

func DoEverything(a, b int, c string, d bool) (int, error) {
    if c == "" {
        return 0, errors.New("c cannot be empty")
    }
    if !d {
        return 1, errors.New("d must be true")
    }
    return a + b, nil
}
Nach dem Login kopieren
Best Practice:

Funktionen in kleinere, wiederverwendbare Funktionen aufteilen.

2. Funktionen ohne Dokumentzeichenfolgen

func DoSomething(x int) int {
    return x * x
}
Nach dem Login kopieren

Best Practice: Fügen Sie für jede Funktion eine Dokumentzeichenfolge hinzu, die ihren Zweck, ihre Parameter und Rückgabewerte beschreibt.

3. Ausgabeparameter

func Swap(a, b *int) {
    tmp := *a
    *a = *b
    *b = tmp
}
Nach dem Login kopieren

Best Practice: Vermeiden Sie die Verwendung von Ausgabeparametern, da der Code dadurch schwer zu verstehen und zu debuggen ist.

4. Zu viele verschachtelte Funktionen

func Nested(x int) int {
    if x > 10 {
        func inner(y int) int {
            return y + 1
        }
        return inner(x)
    }
    return x
}
Nach dem Login kopieren

Best Practice: Verschachtelte Funktionen aus der Hauptfunktion verschieben oder Abschlüsse verwenden.

5. Funktionen geben Fehlercodes anstelle von Fehlerwerten zurück

func OpenFile(name string) int {
    f, err := os.Open(name)
    if err != nil {
        return -1
    }
    return f.Fd()
}
Nach dem Login kopieren

Best Practice: Gemäß der Go-Sprachkonvention sollten Funktionen Fehlerwerte anstelle von Fehlercodes zurückgeben.

Praktischer Fall

Betrachten Sie die folgende Funktion, die eine Liste in ein Wörterbuch konvertieren muss:

// 不遵循最佳实践的示例
func ConvertListToDict(list []string) map[string]bool {
    dict := make(map[string]bool)
    for _, v := range list {
        dict[v] = true
    }
    if len(dict) != len(list) {
        return nil
    }
    return dict
}
Nach dem Login kopieren
Diese Funktion hat das folgende Problem:

Der Rückgabewert ist nil, aber der docstring sagt diese Bedingung nicht. Die Funktion verarbeitet keine doppelten Elemente und die Rückgabe von nil ist ebenfalls mehrdeutig.

Beispiel für die Befolgung von Best Practices

    // 遵循最佳实践的示例
    func ConvertListToDict(list []string) (map[string]bool, error) {
        dict := make(map[string]bool)
        for _, v := range list {
            if _, ok := dict[v]; ok {
                return nil, errors.New("duplicate element in list")
            }
            dict[v] = true
        }
        return dict, nil
    }
    Nach dem Login kopieren

  • Diese Funktion löst das oben genannte Problem und gibt einen Fehlerwert für doppelte Elemente zurück. nil,但文档字符串未说明此情况。
  • 函数不处理重复元素,返回 nil
  • Das obige ist der detaillierte Inhalt vonGegenbeispiele, die gegen Best Practices für Golang-Funktionen verstoßen. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Verwandte Etiketten:
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
Beliebte Tutorials
Mehr>
Neueste Downloads
Mehr>
Web-Effekte
Quellcode der Website
Website-Materialien
Frontend-Vorlage