Ajouter un commentaire

Go 1.18 bêta supporte la programmation générique

Par:
fredericmazue

jeu, 16/12/2021 - 13:40

Comme annoncé mi-novembre, le langage Go version 1.18 supportera la programmation générique. Google a depuis avancé sur ce sujet et vient de publier Go 1.18 bêta qui permet de découvrir cette nouvelle prise en charge par Go du code générique utilisant des types paramétrés

Google souligne que Go 1.18 Beta 1 représente une énorme quantité de travail de la part de toute l'équipe Go de Google et des contributeurs Go du monde entier, et ajoute que les génériques sont le changement le plus important apporté à Go depuis la sortie de Go 1.

La programmation générique de Go utilisant des types paramétrés est décrit en détail dans ce billet. Voici un exemple simple pour donner une idée de ce qu'est le travail avec la programmation générique en Go.

Soit une fonction classique qui inverse la liste d'entiers qu'elle reçoit en argument :

func ReverseInts(s []int) {
    first := 0
    last := len(s)
    for first < last {
        s[first], s[last] = s[last], s[first]
        first++
        last--
    }
}

L'équivalent en programmation générique sera :

func Reverse (type Element) (s []Element) {
    first := 0
    last := len(s) - 1
    for first < last {
        s[first], s[last] = s[last], s[first]
        first++
        last--
    }
}

Le corps de la fonction est exactement le même. Seule la signature de la fonction a changé. La fonction reçoit un paramètre de type et s'invoque ainsi :

func ReverseAndPrint(s []int) {
    Reverse(int)(s)
    fmt.Println(s)
}

Go 1.18 Bêta ajoute aussi une prise en charge intégrée pour l'écriture de tests basés sur le fuzzing, pour trouver automatiquement les entrées qui font planter votre programme ou renvoient des réponses invalides.

Go 1.18 bêta apporte encore un nouvel espace de travail, qui vous permet de travailler avec plusieurs modules Go simultanément, ce qui peut s'avérer intéressant pour les gros projets.

Filtered HTML

Plain text

CAPTCHA
Cette question permet de vérifier que vous n'êtes pas un robot spammeur :-)
 DDD   V     V  L      GGG   M   M 
D D V V L G MM MM
D D V V L G GG M M M
D D V V L G G M M
DDD V LLLL GGG M M