Packages internes et espaces de travail
internal/, directives replace et go work
Packages internes et espaces de travail est une leçon Go Academy gratuite sur CoddyKit. Ceci est la leçon 4 sur 4. Tu peux lire la leçon complète ci-dessous gratuitement — puis la pratiquer en direct dans le navigateur avec un éditeur de code intégré et un tuteur IA 24/7. Elle fait partie du parcours d'apprentissage Go Academy, et ta progression se synchronise sur le web et l'application CoddyKit. Le cours Go Academy comprend 4 leçons au total.
Le répertoire internal/
Les paquets situés dans un répertoire internal/ ne peuvent être importés que par du code appartenant à l’arborescence de répertoires parente. Cela garantit l’encapsulation des paquets :
// Project structure:
// myapp/
// main.go
// internal/
// auth/auth.go <- can only be imported by myapp/
// db/db.go <- can only be imported by myapp/
// api/
// handlers.go <- can import myapp/internal/auth
// External package CANNOT do:
// import "myapp/internal/auth" <- compile errorUtiliser les paquets internal/
Le code situé dans le même module (au-dessus du répertoire internal/) peut importer librement les paquets internes :
// myapp/api/handlers.go
package api
import (
"myapp/internal/auth"
"myapp/internal/db"
)
func GetUser(id int) (*db.User, error) {
if !auth.IsValid() {
return nil, auth.ErrUnauthorized
}
return db.FindUser(id)
}Pourquoi utiliser internal/ ?
Avantages de la convention internal/ :
- Empêche les autres modules de dépendre des détails d’implémentation
- Vous permet de remanier librement le code sans interrompre les appels externes
- Indique clairement que cet élément ne fait pas partie de l’API publique
- Les outils Go standards font respecter cette restriction au moment de la compilation
Espaces de travail Go — go work
Go 1.18 a introduit les espaces de travail pour travailler simultanément avec plusieurs modules locaux sans directives replace :
# Create a workspace in parent directory:
go work init ./myapp ./mylib
# Creates go.work:
# go 1.21
# use (
# ./myapp
# ./mylib
# )
# Now myapp can import mylib without replace directivesgo work sync
Synchronisez les dépendances de l’espace de travail avec go work sync :
# go.work file:
go 1.21
use (
./api
./worker
./shared
)
# Sync all module dependencies:
go work sync
# Build across all workspace modules:
go build ./...
# Test across all workspace modules:
go test ./...Espace de travail ou directive replace
Comparaison de deux approches pour le développement local avec plusieurs modules :
// BEFORE workspaces (cumbersome):
// go.mod in myapp:
// replace github.com/me/mylib => ../mylib
// Must remove before publishing!
// WITH workspaces (cleaner):
// go.work at root:
// use (./myapp ./mylib)
// go.mod files stay clean — go.work is gitignoredCas d’utilisation des espaces de travail
Quand utiliser les espaces de travail Go :
- Développer simultanément une bibliothèque et le programme qui l’utilise
- Gérer un monodépôt contenant plusieurs modules qui se référencent mutuellement
- Tester les modifications apportées à un module partagé avant sa publication
- Travailler sur une version dérivée d’une dépendance en parallèle de votre application
go work add et go work use
Gérez les entrées de l’espace de travail avec les sous-commandes go work :
# Add a module to the workspace
go work use ./newservice
# Remove a module from workspace
go work use -r ./oldservice
# Edit go.work directly (opens $EDITOR):
go work edit
# go.work should usually be gitignored:
echo "go.work" >> .gitignore
echo "go.work.sum" >> .gitignoreinternal/ et espace de travail ensemble
Les paquets internes et les espaces de travail s’intègrent naturellement dans les monodépôts :
// Monorepo structure:
// services/
// go.work
// auth-service/
// internal/tokens/ <- private to auth-service
// order-service/
// internal/pricing/ <- private to order-service
// shared/
// models/ <- shared across services
// go.work:
// use (./auth-service ./order-service ./shared)Bonnes pratiques pour organiser les paquets
Recommandations pour la structure d’un projet Go :
- Structure de paquets plate pour les petits projets : évitez l’organisation prématurée
- Utilisez
internal/pour les détails d’implémentation qui ne sont pas destinés à un usage externe - Placez les paquets principaux de l’interface en ligne de commande sous
cmd/appname/ - Utilisez les espaces de travail pour les dépôts à plusieurs modules, mais ajoutez
go.workà la liste des fichiers ignorés par Git - Évitez l’imbrication excessive : au maximum 3 à 4 niveaux de paquets
Vérification rapide
Qui peut importer un paquet situé dans un répertoire internal/ ?
Récapitulatif : paquets internes et espaces de travail
Résumé :
internal/limite les importations à l’arborescence de répertoires parente ; cette règle est appliquée par le compilateur- Utilisez
internal/pour masquer les détails d’implémentation aux utilisateurs externes go work initcrée un espace de travail pour le développement local avec plusieurs modules- Les espaces de travail remplacent les directives
replacepour le développement local - Ajoutez
go.worketgo.work.sumà la liste des fichiers ignorés par Git
Questions Fréquemment Posées
La leçon « Packages internes et espaces de travail » est-elle gratuite ?
Oui — le texte complet de « Packages internes et espaces de travail » est gratuit à lire ici sur le web. Pour la pratiquer de manière interactive (un éditeur de code intégré et un tuteur IA 24/7) et déverrouiller le reste du cours Go Academy, passe à CoddyKit PRO. Le cours Go Academy comprend 4 leçons au total.
Qu'est-ce que j'apprendrai dans « Packages internes et espaces de travail » ?
internal/, directives replace et go work Tu pratiques Go Academy avec du code pratique que tu exécutes directement dans le navigateur, et un tuteur IA 24/7 répond à tes questions au fur et à mesure que tu avances dans la leçon.
Dois-je avoir de l'expérience pour commencer Go Academy ?
Aucune expérience préalable n'est requise. Go Academy sur CoddyKit est structuré pour les débutants jusqu'aux apprenants avancés, donc tu peux commencer ici ou depuis le début et avancer à ton rythme. Ceci est la leçon 4 sur 4.
Combien de temps prend la leçon « Packages internes et espaces de travail » ?
La plupart des leçons CoddyKit prennent environ 5–10 minutes. Chacune est courte et interactive, tu progresses régulièrement et tu repiques exactement où tu t'es arrêté sur le web et l'app.
Peux-tu écrire et exécuter du code dans cette leçon Go Academy ?
Oui. Chaque leçon Go Academy inclut un éditeur de code intégré, tu écris et exécutes du vrai code directement dans ton navigateur et tu reçois des retours IA instantanés — aucune configuration locale requise.
Toutes les leçons de ce cours
- Packages : organiser le code Go
- Modules Go avec go mod
- Ajouter des dépendances externes
- Packages internes et espaces de travail