« Pourquoi Go ? » m'a-t-on demandé.
« Parce que mon script Python a pris plus de temps à charger que le temps que j'ai mis à préparer le café », ai-je répondu.
D'accord, soyons honnêtes. Vous avez probablement déjà entendu parler de Go cinq cents fois. On vous a dit qu'il était rapide, que Docker, Kubernetes et la moitié de tout ce qui tourne en production y sont écrits. Vous avez hoché la tête, puis ouvert le VS Code habituel avec un autre projet JavaScript.

Étape 0 : Installation (si ce n'est pas déjà fait)
Allez sur go.dev/dl et téléchargez le programme d'installation. Ou, si vous êtes une personne cultivée :
# macOS
brew install go
# Ubuntu/Debian
sudo apt install golang-go
# Windows (via scoop)
scoop install goVérification :
$ go version
go1.22.x (ou plus récent) signifie que tout va bien 👍
Si vous avez vu la version, félicitations, vous êtes déjà plus loin que 90 % des personnes qui « allaient essayer Go ».
Étape 1 : Créer un projet
mkdir my-first-go-cli
cd my-first-go-cli
go mod init my-first-go-cligo mod init est un analogue de npm init ou pip init. Crée un fichier go.mod qui suit les dépendances. Oui, dans Go, le système modulaire est prêt à l'emploi. Oui, ça marche. Oui, j'ai été surpris aussi.
Étape 2 : Écrire le code (la partie la plus intéressante)
Créons le fichier main.go :
package main
import (
"fmt"
"os"
"strings"
"time"
)
func main() {
args := os.Args[1:]
if len(args) == 0 {
fmt.Println("🐹 Hi! I'm your first Go-CLI!")
fmt.Println()
fmt.Println("Use:")
fmt.Println(" greet <name> — say hello")
fmt.Println(" time — current time")
fmt.Println(" reverse <text> — flip the line")
fmt.Println()
fmt.Println("Example: my-first-go-cli greet Alex")
return
}
command := strings.ToLower(args[0])
switch command {
case "greet":
if len(args) < 2 {
fmt.Println("❌ Enter a name! Example: greet Gofer")
return
}
name := strings.Join(args[1:], " ")
fmt.Printf("👋 Hi %s! Welcome to the world of Go!\n", name)
case "time":
now := time.Now()
fmt.Printf("🕐 Now: %s\n", now.Format("15:04:05 02.01.2006"))
fmt.Printf("📅 Day of the week: %s\n", russianWeekday(now.Weekday()))
case "reverse":
if len(args) < 2 {
fmt.Println("❌ Specify the text! Example: reverse Hello")
return
}
text := strings.Join(args[1:], " ")
fmt.Printf("🔄 Result: %s\n", reverseString(text))
default:
fmt.Printf("🤷 Unknown command: %s\n", command)
fmt.Println("Run without arguments to see help.")
}
}
func reverseString(s string) string {
runes := []rune(s)
for i, j := 0, len(runes)-1; i < j; i, j = i+1, j-1 {
runes[i], runes[j] = runes[j], runes[i]
}
return string(runes)
}
func russianWeekday(w time.Weekday) string {
days := map[time.Weekday]string{
time.Monday: "Monday",
time.Tuesday: "Tuesday",
time.Wednesday: "Wednesday",
time.Thursday: "Thursday",
time.Friday: "Friday",
time.Saturday: "Saturday",
time.Sunday: "Sunday",
}
return days[w]
}Que se passe-t-il ici (pas de panique) :
package main— point d'entrée. Dans Go, tout commence parmain.os.Args— arguments de la ligne de commande.os.Args[0]— nom du programme,[1:]— tout le reste.switchest comme switch dans d'autres langages, mais sansbreak. Oui, Go ne tombe pas plus loin automatiquement. Merci, Go. 🙏[]rune- pour un retournement correct de la ligne avec Unicode (sinon le cyrillique se dissoudra).
Étape 3 : Lancer
# Il suffit de lancer
go run main.go
# Avec les équipes
go run main.go greet Гофер
go run main.go time
go run main.go reverse "Go is a thrill"Ça marche. Dès la première fois. Sans node_modules sur 500 Mo. Sans environnement virtuel. Il fonctionne simplement.
Étape 4 : Assembler le binaire 🔨
Et c'est là que la magie de Go commence :
go build -o mycli main.goC'est tout. Un fichier. Un binaire. Aucune dépendance. Vous pouvez le transmettre à un ami et il fonctionnera sans avoir à installer Go, Python, Node.js ou quoi que ce soit d'autre.
Compilation croisée (bonus pour les utilisateurs avancés)
Vous voulez compiler sous Windows, en étant sur Mac ? Facile :
# Pour WindowsGOOS=windows GOARCH=amd64 go build -o mycli.exe main.go
# Pour LinuxGOOS=linux GOARCH=amd64 go build -o mycli-linux main.go
# Pour macOS (Apple Silicon)GOOS=darwin GOARCH=arm64 go build -o mycli-mac main.goDeux variables d'environnement - et vous avez un binaire pour n'importe quelle plate-forme. Pas de Docker. Pas de CI/CD. Juste go build. Essayez de faire ça en Python, je vous attends. ☕
Où aller ensuite ?
flag— paquet intégré pour l'analyse des drapeaux (--name,--verbose)cobra— bibliothèque pour les applications CLI sérieuses (kubectl est écrit dessus)Routines et canaux — la raison pour laquelle tout le monde aime Go
net/http— écrire un serveur API en Go est plus facile que de commander une pizza
📱 Vous voulez améliorer vos compétences tous les jours ?
Si le sujet vous intéresse et que vous souhaitez apprendre la programmation avec la pratique — regarde dans l'application Kodik. Vous pouvez y résoudre des problèmes, suivre des cours interactifs et écrire du vrai code, et pas seulement regarder des vidéos (nous savons tous comment cela se termine 😅).
Et nous avons aussi Chaîne Telegram pour les développeurs — des messages utiles, des analyses de tâches, des aide-mémoire et des mèmes (où sans eux) sont régulièrement publiés. Plus de 2 000 développeurs sont déjà dans le sujet : c'est un excellent moyen de répéter le matériel et de garder votre cerveau en forme pendant que vous voyagez dans le métro ou attendez un déploiement.
Kodik + chaîne Telegram = combo pour ceux qui veulent grandir en tant que développeur, et pas seulement collecter des signets « à lire plus tard ». 🚀
Eh bien, votre bouilloire n'a pas encore bouilli ? Alors, nous avons réussi. Allez préparer du thé et écrire votre première goroutine, vous l'avez mérité. 🐹☕
