Maison >développement back-end >Golang >Comment gérer le problème du trop grand nombre de valeurs de retour dans Golang

Comment gérer le problème du trop grand nombre de valeurs de retour dans Golang

王林
王林original
2019-12-24 15:26:052809parcourir

Comment gérer le problème du trop grand nombre de valeurs de retour dans Golang

Renvois de valeurs multiples

Une fonctionnalité très particulière de Go (pour un langage compilé) est que les fonctions et méthodes peuvent renvoyer plusieurs valeurs (Python et Perl fonctionnent également).

Cela peut être utilisé pour améliorer beaucoup de mauvaises conventions dans les programmes C : modifier les paramètres de manière à renvoyer une erreur (par exemple, renvoyer -1 sur EOF). Dans Go, Write renvoie une valeur de comptage et une erreur : "Oui, vous avez écrit quelques octets, mais tous n'ont pas été écrits en raison d'une exception de périphérique".

*File.Write dans le package os est déclaré comme ceci :

func (file *File) Write(b []byte) (n int, err error)

Comme le dit la documentation, il renvoie le nombre d'octets écrits, et lorsque n != len(b) , renvoie une erreur non nulle. Il s’agit d’une approche courante dans Go. Les tuples n'apparaissent pas comme des types natifs, donc plusieurs valeurs de retour peuvent être le meilleur choix. Vous pouvez renvoyer exactement la valeur souhaitée sans avoir à surcharger l'espace du champ avec un signal d'erreur spécifique.

Valeurs de retour nommées

La valeur de retour ou le paramètre de résultat d'une fonction Go peut recevoir un nom et être utilisée comme une variable d'origine, tout comme un paramètre d'entrée. S'ils sont nommés, ils sont initialisés avec la valeur nulle de leur type au début de la fonction. Si la fonction exécute l'instruction return sans ajouter de paramètres, les paramètres de résultat seront renvoyés. Utiliser cette fonctionnalité permet (encore) de faire plus avec moins de code.

Les noms ne sont pas obligatoires, mais ils peuvent rendre le code plus robuste et plus clair : voici la documentation. Par exemple, nommer la valeur de retour nextPos de type int peut indiquer qui représente quel

func nextInt(b []byte, pos int) (value, nextPos int) { /* ... */ }

Puisque les résultats nommés sont initialisés et associés au retour non modifié, ils peuvent être très simples et clairs. Voici un morceau de code io.ReadFull, qui est très bien utilisé :

func ReadFull(r Reader, buf []byte) (n int, err error) {
    for len(buf) > 0 && err == nil {
        var nr int
        nr, err = r.Read(buf)
        n += nr
        buf = buf[nr:len(buf)]
    }
    return
}

Articles et tutoriels connexes recommandés : tutoriel golang

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