Pourquoi utiliser Golang ?

Liens intéressants

Constantes

Les constantes sont déclarées comme des constantes mais utilise le mot clé const au lieu de var. Les constantes peuvent être des charactères, des strings, des booléens ou des valeurs numériques (pas d’arrays ou de slices),

const Pi = 3.14
// Pi is a constant

Un moyen détourné d’obtenir des “constantes” pour tout les types possibles est de faire une fonction qui va renvoyer la valeur voulue, mais c’est sous-optimal car on instancie un nouvel slice à chaque appel de sliceConstant.

func sliceConstant() []string {
 return []string{"1","2", "3"}
}

Closer Interfaces

Les interfaces comportant un closer, c’est à dire une méthode (type).Close() error ne doivent PAS être fermées en utilisant defer SAUF si defer fait paniquer le programme.

Exemple pratique:

func helloNotes() error {
    f, err := os.Create("somewhere/notes.txt")
    defer f.Close() // ici la valeur de l'erreur n'est pas vérifiée
    if err != nil {
        return err
    }

    if err = io.WriteString(f, "hello world"); err != nil {
        f.Close()
        return err
    }
    return nil
}

Il vaut mieux fermer le fichier à la fin “manuellement”.

func helloNotes() error {
    f, err := os.Create("somewhere/notes.txt")
    if err != nil {
        return err
    }

    if err = io.WriteString(f, "hello world"); err != nil {
        f.Close()
        return err
    }

    return f.Close()
}

Ou alors on utiliser panic (mais ça change la gestion des erreurs):

func helloNotes() error {
    f, err := os.Create("somewhere/notes.txt")
    defer func () {
        err := f.Close()
        if err != nil {
            panic(err)
        }
    }()
    if err != nil {
        return err
    }

    if err = io.WriteString(f, "hello world"); err != nil {
        f.Close()
        return err
    }

    return nil
}

Articles intéressants

Libs

Une liste de librairies intéressantes.