![Quels sont les scénarios dapplication du modèle singleton dans Golang ?](https://img.php.cn/upload/article/000/887/227/170960707287183.jpg)
Golang est un langage de programmation open source à typage statique, efficace, puissant et concis. Dans Golang, le modèle singleton est un modèle de conception couramment utilisé pour garantir qu'une classe n'a qu'une seule instance et fournit un point d'accès global. Le modèle singleton peut jouer un rôle dans de nombreux scénarios. Ce qui suit présentera quelques scénarios adaptés à l'application du modèle singleton dans Golang et joindra des exemples de code spécifiques.
- Pool de connexions à la base de données
Dans les applications Web à haute concurrence, la création et la destruction fréquentes de connexions à la base de données nécessitent beaucoup de ressources. En utilisant le mode singleton pour gérer le pool de connexions à la base de données, vous pouvez réduire efficacement le nombre de temps de création et de destruction de connexions et améliorer les performances du système. Voici un exemple simple de pool de connexion à la base de données :
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 | package database
import (
"database/sql"
"sync"
_ "github.com/go-sql-driver/mysql"
)
var db *sql.DB
var once sync.Once
func GetDB() *sql.DB {
once.Do(func() {
var err error
db, err = sql.Open( "mysql" , "username:password@tcp(127.0.0.1:3306)/dbname" )
if err != nil {
panic(err)
}
})
return db
}
|
Copier après la connexion
- Lecture du fichier de configuration
Dans les projets, il est généralement nécessaire de lire les fichiers de configuration pour initialiser les paramètres du système. Dans ce cas, vous pouvez utiliser le mode singleton pour vous assurer que la configuration. l'objet n'est lu qu'une seule fois. Ce qui suit est un exemple simple de lecture de fichier de configuration :
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 | package config
import (
"github.com/spf13/viper"
"sync"
)
type Config struct {
DatabaseUsername string
DatabasePassword string
}
var instance *Config
var once sync.Once
func GetConfig() *Config {
once.Do(func() {
viper.SetConfigFile( "config.yaml" )
viper.ReadInConfig()
instance = &Config{
DatabaseUsername: viper.GetString( "database.username" ),
DatabasePassword: viper.GetString( "database.password" ),
}
})
return instance
}
|
Copier après la connexion
- Logger
La connexion aux applications est un comportement courant, et le mode singleton peut garantir une instance unique de l'enregistreur pour éviter la création répétée de journaux et améliorer l'efficacité de la journalisation. Voici un exemple simple d'enregistreur :
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 | package logger
import (
"log"
"sync"
)
type Logger struct {
}
var instance *Logger
var once sync.Once
func GetLogger() *Logger {
once.Do(func() {
instance = &Logger{}
})
return instance
}
func (l *Logger) Log(message string) {
log.Println(message)
}
|
Copier après la connexion
Ci-dessus sont quelques scénarios et exemples de code spécifiques adaptés à l'application du mode singleton dans Golang. Dans le développement réel, vous pouvez appliquer de manière flexible le mode singleton en fonction des besoins du projet et améliorer le code. réutilisabilité et performance.
Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!