Portée et meilleures pratiques
Comprendre la portée des variables
Portée au niveau du package
graph TD
A[Package Variable] --> B[Visible Within Same Package]
A --> C[Accessible by All Functions]
A --> D[Cannot Be Accessed Outside Package]
Règles de visibilité
Visibilité |
Convention de nommage |
Exemple |
Au niveau du package |
Première lettre en minuscule |
serverConfig |
Exportée (Publique) |
Première lettre en majuscule |
ServerConfig |
Pratiques recommandées
Minimiser l'état global
// Not Recommended
var globalCounter int
// Recommended
func createCounter() *Counter {
return &Counter{value: 0}
}
Éviter les variables de package mutables
// Bad Practice
var configuration = map[string]string{
"env": "development",
}
// Better Approach
type Config struct {
Environment string
}
var Configuration = &Config{
Environment: "development",
}
Considérations sur la concurrence
Variables de package sûres pour les threads
import "sync"
var (
mutex sync.Mutex
sharedResource = make(map[string]int)
)
func safeUpdate(key string, value int) {
mutex.Lock()
defer mutex.Unlock()
sharedResource[key] = value
}
Ordre d'initialisation
graph TD
A[Package Variable Initialization] --> B[Imported Packages First]
B --> C[Constant Declarations]
C --> D[Variable Declarations]
D --> E[Init Functions]
Gestion de la mémoire
Approche |
Impact mémoire |
Performances |
Variables constantes |
Faible |
Très élevées |
Structs immuables |
Moyen |
Élevées |
Variables mutables |
Élevé |
Plus faibles |
Techniques d'initialisation avancées
Injection de dépendance
type DatabaseConfig struct {
Host string
Port int
}
var (
defaultConfig = DatabaseConfig{
Host: "localhost",
Port: 5432,
}
)
func CreateConnection(config DatabaseConfig) *Connection {
// Connection logic
}
Directives recommandées par LabEx
- Privilégiez les variables locales
- Utilisez les variables de package avec modération
- Assurez-vous de la sécurité des threads
- Documentez les objectifs des variables de package
- Pensez à l'immuabilité
Stratégies de prévention des erreurs
var (
// Use type-safe constants
maxConnections = 100
// Prevent unintended modifications
readOnlyConfig = struct {
Host string
Port int
}{
Host: "localhost",
Port: 8080,
}
)
Conclusion
Une gestion efficace des variables de package nécessite de comprendre la portée, la visibilité et les effets secondaires potentiels. Priorisez toujours la clarté et la maintenabilité du code.
Chez LabEx, nous mettons l'accent sur l'écriture d'un code Go propre, efficace et prévisible grâce à une conception et une gestion soignées des variables.