• # Mux & co

    Posté par  . Évalué à 3 (+1/-0). Dernière modification le 07 février 2024 à 19:43.

    Un truc que j'avais testé avant même la release c'est les nouvelles possibilités du router standard qui permettent de mentionner une méthode http ainsi que des paramètres de path à récupérer directement dans la Request.

    Ce qui donne

    m.HandleFunc("GET /item/{id}",...)
    
    puis
    
    r.PathValue("id")
    

    Ca permet d'éviter la petite dépendance, dont on aime bien faire la chasse en Go, sur gorilla ou chi par ex.

    Autre nouveauté que je ne trouve pas révolutionnaire mais qui va vite rentrer dans les mœurs c'est for i := range 10 ou même for range 10 (au lieu de for i:=0; i<10; i++).

    Comme d'habitude les nouvelles versions de Go sont par principe d'un ennui précieux je ne prend pas la peine d'en dire plus…

    • [^] # Re: Mux & co

      Posté par  . Évalué à 1 (+0/-0). Dernière modification le 07 février 2024 à 22:47.

      Mais tu l'a bien dis. Le "for in range", c'est inutile mais tellement plus pratique/lisible.

      • [^] # Re: Mux & co

        Posté par  . Évalué à 7 (+5/-0).

        Je ne sais pas si c'est plus lisible, c'est le genre de truc où on n'est jamais tout à fait sûr si c'est < 10 ou <= 10…

        • [^] # Re: Mux & co

          Posté par  . Évalué à 0 (+0/-1).

          C'est "<=" forcément.

          • [^] # Re: Mux & co

            Posté par  . Évalué à 3 (+1/-0).

            For an integer value n, the iteration values 0 through n-1 are produced in increasing order. If n <= 0, the loop does not run any iterations.

            Dans la partie "For statements" → "For statements with range clause" de la spec.

            https://linuxfr.org/users/barmic/journaux/y-en-a-marre-de-ce-gros-troll

      • [^] # Re: Mux & co

        Posté par  . Évalué à 1 (+0/-0). Dernière modification le 08 février 2024 à 08:31.

        Inutile, je ne sais pas, tu peux avoir besoin de faire N fois une même chose, l'exemple du package benchmark :

        func BenchmarkRandInt(b *testing.B) {
            for i := 0; i < b.N; i++ {
                rand.Int()
            }
        }
        

        devient

        func BenchmarkRandInt(b *testing.B) {
            for range b.N {
                rand.Int()
            }
        }
        
        • [^] # Re: Mux & co

          Posté par  . Évalué à 1 (+0/-0). Dernière modification le 10 février 2024 à 21:18.

          C'est ce que je dis : "c'est innutile" dans la mesure ou une boucle for n'est pas compliqué à écrire et marche très bien.

          Mais c'est tellement "plus lisible" dans la mesure ou tu comprends tout de suite de quoi il s'agit (Outre que tu économise des caractères) mais surtout tu sais à la lecture en un clin d'oeil ce que ça fait exactement. Avec un for normal il peut toujours s'y glisser des subtilité :
          - Une in/de-crémentation en milieu de boucle pour une optimisation ou par erreur
          - Une sortie < ou <=, autre chose fait avec le "i++" genre un "j--" au passage, un départ à 0 ou 1…

          un exemple pour illustrer (Avec une coquille impossible avec le range ;) ) :

          for (int i=0; i<=10; i++,pti+=4)
          for (int j=10; j>0; j--)
          for (int k=0; j<10; k++)

          Bref un for classique est simple mais peut avoir quelques subtilité si on n'y fait pas attention… et c'est source de bugs.

Envoyer un commentaire

Suivre le flux des commentaires

Note : les commentaires appartiennent à celles et ceux qui les ont postés. Nous n’en sommes pas responsables.