Maison  >  Article  >  développement back-end  >  Contre-exemples qui violent les meilleures pratiques de la fonction Golang

Contre-exemples qui violent les meilleures pratiques de la fonction Golang

王林
王林original
2024-05-03 12:18:01619parcourir

Suivre les meilleures pratiques fonctionnelles est crucial. Évitez les contre-exemples suivants : Fonctions trop longues Fonctions sans docstrings Paramètres de sortie Imbrication de fonctions Trop de fonctions Renvoi de codes d'erreur au lieu de valeurs d'erreur

Contre-exemples qui violent les meilleures pratiques de la fonction Golang

5 contre-exemples qui violent les meilleures pratiques des fonctions du langage Go

en Go Lors de l'écriture élevée -un code de qualité dans un langage, il est crucial de suivre les bonnes pratiques fonctionnelles. Éviter les contre-exemples suivants peut vous aider à écrire des fonctions maintenables, lisibles et efficaces.

1. Fonctions trop longues

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
}

Bonne pratique : Divisez les fonctions en fonctions plus petites et réutilisables.

2. Fonctions sans docstrings

func DoSomething(x int) int {
    return x * x
}

Bonne pratique : Ajoutez des docstrings à chaque fonction décrivant son objectif, ses paramètres et ses valeurs de retour.

3. Paramètres de sortie

func Swap(a, b *int) {
    tmp := *a
    *a = *b
    *b = tmp
}

Meilleure pratique : Évitez d'utiliser des paramètres de sortie car cela rend le code difficile à comprendre et à déboguer.

4. Trop de fonctions imbriquées

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

Meilleure pratique : Déplacez les fonctions imbriquées hors de la fonction principale ou utilisez des fermetures.

5. Les fonctions renvoient des codes d'erreur au lieu de valeurs d'erreur

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

Meilleure pratique : Selon la convention du langage Go, les fonctions doivent renvoyer des valeurs d'erreur au lieu de codes d'erreur.

Exemple pratique

Considérez la fonction suivante qui doit convertir une liste en dictionnaire :

// 不遵循最佳实践的示例
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
}

Cette fonction a le problème suivant :

  • La valeur de retour est nil, mais le docstring ne dit pas cette condition. nil,但文档字符串未说明此情况。
  • 函数不处理重复元素,返回 nil
  • La fonction ne gère pas les éléments en double, et il y a également une ambiguïté dans le retour de nil.

Exemple de bonnes pratiques suivantes

// 遵循最佳实践的示例
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
}

Cette fonction résout le problème ci-dessus et renvoie une valeur d'erreur pour les éléments en double. 🎜

Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!

Déclaration:
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn