MFormations
Modern Go Engineering

Chapitre 20

20 - Ressources

> Répertoire complet des ressources essentielles pour maîtriser Go, des fondamentaux aux outils avancés.

Cours 20 : Ressources essentielles Go

300+ lignes détaillant les ressources clés pour maîtriser Go.


1. Go.dev — Le portail officiel

URL : https://go.dev/

Go.dev est le point d'entrée officiel pour tout développeur Go. Il centralise :

  • Téléchargement : binaires pour toutes les plateformes (Windows, macOS, Linux, etc.)
  • Documentation : liens vers pkg.go.dev, le Tour of Go, Effective Go
  • Blog : articles officiels sur les nouvelles versions et les concepts clés
  • Playground : éditeur Go en ligne pour tester du code
  • Packages : recherche de packages via pkg.go.dev

Fonctionnalités clés :

// Le playground permet de partager du code exécutable
package main

import "fmt"

func main() {
    fmt.Println("Hello, Go.dev!")
}

Cas d'usage :

  • Découvrir les nouveautés d'une version (release notes)
  • Tester rapidement un concept sans installer Go
  • Partager un exemple reproductible

2. pkg.go.dev — La documentation des packages

URL : https://pkg.go.dev/

pkg.go.dev est le moteur de documentation officiel pour les packages Go. Il propose :

  • Documentation complète de la stdlib
  • Documentation des modules tiers
  • Exemples de code intégrés
  • Informations de licence et de sécurité
  • Métriques de popularité

Navigation efficace :

Recherche : "json" → json package, jsonrpc, etc.
Filtres : stdlib, popularité, date de mise à jour
Doc : overview, index, files, subdirectories

Exemple : Pour le package encoding/json :

  • Overview avec des exemples
  • Constants (4)
  • Variables (2)
  • Functions (10) : Compact, HTMLEscape, Indent, Marshal, etc.
  • Types (10) : Decoder, Encoder, InvalidUTF8Error, etc.

Bonnes pratiques :

  • Toujours vérifier la documentation avant d'ajouter une dépendance
  • Lire les exemples pour comprendre l'API
  • Vérifier la compatibilité des versions

3. Go Blog — Articles techniques officiels

URL : https://go.dev/blog/

Le Go Blog publie des articles officiels couvrant :

  • Annonces de versions : chaque nouvelle version majeure (1.22, 1.23, etc.)
  • Concepts techniques : génériques, concurrence, GC, etc.
  • Outils : pprof, trace, fuzzing, modules
  • Études de cas : comment Go est utilisé en production

Articles incontournables :

ArticleSujet
Go Concurrency PatternsPatterns de concurrence par Rob Pike
Share Memory By CommunicatingPhilosophie des channels
The Laws of ReflectionLa réflexion en Go
Go Modules in 2019Introduction aux modules
Twelve Years of GoBilan et évolution
Why Generics?Introduction aux génériques
Go 1.23 iteratorsNouveaux itérateurs

Comment suivre le blog :

  • RSS : https://go.dev/blog/feed.atom
  • Twitter : @golang
  • Reddit : r/golang

4. Go by Example

URL : https://gobyexample.com/

Go by Example est une ressource d'apprentissage qui enseigne Go par des exemples concrets et annotés.

Structure :

  • Plus de 80 exemples couvrant tous les concepts
  • Code exécutable avec sortie commentée
  • Traduit en 10+ langues

Exemple typique :

// Hello World
package main
import "fmt"
func main() {
    fmt.Println("hello world")
}
// Résultat : hello world

Sections clés :

  • Values, Variables, Constants
  • For, If/Else, Switch
  • Arrays, Slices, Maps
  • Functions, Closures, Recursion
  • Structs, Methods, Interfaces
  • Errors, Goroutines, Channels
  • select, time, tickers
  • JSON, HTTP, File I/O
  • Testing, command-line

Utilisation optimale :

  1. Cherchez le sujet qui vous intéresse
  2. Lisez le code et la sortie
  3. Modifiez et testez dans le playground
  4. Passez à la section suivante

5. Effective Go

URL : https://go.dev/doc/effective_go

Effective Go est LE guide officiel des bonnes pratiques et idiomes Go. Écrit par les créateurs du langage.

Chapitres clés :

  • Formatting : pourquoi gofmt est obligatoire
  • Commentary : conventions de documentation
  • Names : conventions de nommage (camelCase, acronymes)
  • Semicolons : règles d'insertion automatique
  • Control structures : if, for, switch idiomatiques
  • Functions : multiple returns, named results, defer
  • Data : allocation avec new/make, slices, maps
  • Methods and interfaces : receivers, conversions
  • Concurrency : goroutines, channels, select
  • Errors : Panic, recover, error handling

Citations importantes :

"Packages should be named after what they provide, not what they contain." "The bigger the interface, the weaker the abstraction." "Don't communicate by sharing memory; share memory by communicating."

Pourquoi lire Effective Go :

  • Comprendre le "pourquoi" des décisions de conception
  • Écrire du code idiomatique lu et approuvé par la communauté
  • Éviter les erreurs de débutant
  • Préparer les revues de code

6. GopherCon — La conférence Go

URL : https://www.gophercon.com/

GopherCon est la conférence annuelle dédiée à Go, organisée depuis 2014.

Talks marquants par année :

  • 2012 : Go Concurrency Patterns (Rob Pike)
  • 2013 : Advanced Go Concurrency Patterns (Rob Pike)
  • 2014 : Go at Google (Rob Pike)
  • 2015 : The Evolution of Go (Robert Griesemer)
  • 2016 : Go in the Cloud (various)
  • 2017 : The HTTP Handler Interface (Tomás Senart)
  • 2018 : Go 2 Draft Designs (Russ Cox)
  • 2019 : Go Modules (Russ Cox)
  • 2020 : Go's New Code of Conduct (various)
  • 2021 : Generics! (Robert Griesemer, Ian Lance Taylor)
  • 2022 : Go 1.18 and Beyond
  • 2023 : Go in Production

Média :

  • YouTube : toutes les présentations sont publiées
  • Slides : disponibles sur le site de GopherCon
  • Proceedings : articles écrits pour chaque talk

Conférences régionales associées :

  • GopherCon Europe
  • GopherCon India
  • GopherCon Brasil
  • GopherCon UK
  • GopherCon Israel

7. GoTime FM — Le podcast Go

URL : https://changelog.com/gotime

GoTime (Go Time) est un podcast hebdomadaire sur Go hébergé par le réseau Changelog.

Hôtes réguliers :

  • Natalie Pistunovich
  • Angelica Hill
  • Johnny Boursiquot
  • Kris Brandow

Sujets récurrents :

  • Nouvelles versions de Go
  • Bibliothèques et frameworks
  • Interviews de gophers célèbres
  • Astuces et meilleures pratiques
  • Débats sur l'évolution du langage

Épisodes recommandés :

ÉpisodeSujet
#112Generics in Go
#145Go 1.18 Feature Deep Dive
#187gRPC and Protocol Buffers
#210Go Concurrency Patterns
#245Go in the Enterprise
#271WASM and Go
#298Go 1.23 Iterators

8. Awesome Go — La liste curated

URL : https://awesome-go.com/

Awesome Go est une liste curated des meilleures bibliothèques et outils Go, maintenue par la communauté.

Catégories (extrait) :

CatégorieBibliothèques notables
CLICobra, Viper, pflag, urfave/cli
Webchi, gorilla/mux, gin, echo, fiber
Databasepgx, go-redis, mongo-go, gorm, sqlx
Testingtestify, gomock, go-sqlmock, gomega
Concurrencyerrgroup, singleflight, semaphore
gRPCgrpc-go, protobuf, connect-go
Messagingnsq, nats, kafka-go, rabbitmq
Loggingslog, logrus, zap, zerolog
Monitoringprometheus, opentelemetry, pprof
Securitycrypto, jwt-go, oauth2, acme

Comment l'utiliser :

  1. Cherchez une bibliothèque pour votre besoin
  2. Vérifiez les étoiles GitHub et la maintenance
  3. Lisez la documentation et les exemples
  4. Évaluez les alternatives listées

Critères de sélection maintenus par Awesome Go :

  • Projet actif (commits récents)
  • Bien documenté
  • Testé (couverture)
  • Communauté active

9. Go Tools — La boîte à outils officielle

URL : https://go.dev/doc/toolchest

Go inclut une suite d'outils intégrés qui couvrent tout le cycle de vie du développement.

Compilation

go build          # Compile le package courant
go install        # Compile et installe
go clean          # Nettoie les fichiers de build

Tests et qualité

go test           # Exécute les tests
go test -bench .  # Exécute les benchmarks
go vet            # Analyse statique
go tool cover     # Couverture de code

Gestion de code

go fmt            # Formate le code
go mod init       # Initialise un module
go mod tidy       # Nettoie les dépendances
go get            # Ajoute une dépendance
go generate       # Génère du code

Profilage et debugging

go tool pprof     # Analyse de profilage
go tool trace     # Analyse de trace
go test -race     # Race detector
go test -fuzz     # Fuzzing

Distribution

go build -ldflags="-s -w"  # Build optimisé
GOOS=linux GOARCH=amd64 go build  # Cross-compilation

10. Ressources complémentaires

Livres

TitreAuteurISBN
The Go Programming LanguageDonovan & Kernighan978-0134190440
Concurrency in GoKatherine Cox-Buday978-1491941195
100 Go MistakesTeiva Harsanyi978-1617299599
Go in ActionWilliam Kennedy978-1617291784
Let's GoAlex Edwards978-1784395438

Cours en ligne

PlateformeCours
CourseraProgramming with Google Go
UdemyGo: The Complete Developer's Guide
PluralsightGo Fundamentals
O'ReillyLearning Go
ExercismGo Track

Communauté

Newsletters

NewsletterDescription
Go WeeklyRésumé hebdomadaire
Golang WeeklyNews et articles
Go GazetteCommunauté Go
Go Time NewsletterDu podcast GoTime

Outils avancés

OutilDescription
delveDebugger Go avancé
golangci-lintLinter aggregator
mockgenGénération de mocks
stringerGénération de String()
protocCompilateur Protobuf
bufBuild system Protobuf
goreleaserRelease automation
gohugoStatic site generator

Ce chapitre vous fournit un guide complet des ressources disponibles pour apprendre et maîtriser Go. La clé est la pratique régulière combinée à l'utilisation de ces ressources pour approfondir chaque concept.