Heim >Backend-Entwicklung >Golang >Entwurfsmuster mit Singleton im Paket
PHP-Editor Apple ist hier, um Ihnen ein häufig verwendetes Designmuster vorzustellen – das Designmuster mit Singleton. In der Softwareentwicklung wird häufig das Singleton-Muster verwendet, das sicherstellt, dass eine Klasse nur eine Instanz hat und einen globalen Zugriffspunkt bereitstellt. Dieses Entwurfsmuster kann die Wiederverwendbarkeit und Leistung von Code verbessern und gleichzeitig einige potenzielle Probleme vermeiden. Bei der Verwendung dieses Entwurfsmusters müssen Sie auf Details wie Thread-Sicherheit und verzögertes Laden achten, um die Korrektheit und Zuverlässigkeit der Implementierung sicherzustellen.
Ich bin immer noch kein Golang-Experte und versuche, Best Practices zu verstehen und zu lernen
So initialisieren Sie einen Singleton in einem Paket und machen ihn threadsicher, sodass es auch dann nur eine Instanz gibt, wenn das Paket mehrmals in verschiedene Dateien importiert wird
Jetzt Instanz sessions
在 main 中启动,但随后我必须传递它。如何在 sess
包内启动实例 sessions
und daraus eine globale Variable oder etwas anderes im Paket machen?
Ich möchte, dass es eine private Variable innerhalb des sess
Pakets
package main func main(){ sessions := sess.Init() }
sess
Modul
package sess import ( "sync" "time" ) type pool struct { lock sync.RWMutex sessions map[string]*session } func Init() *pool { p := &pool{ sessions: map[string]*session{}, } return p } func (p *pool) Set(sid string, s *session){ p.lock.Lock() defer p.lock.Unlock() p.sessions[sid] = s } func (p *pool) Get(sid string) (*session, bool){ p.lock.RLock() defer p.lock.RUnlock() s, ok := p.sessions[sid] return s, ok }
Verwenden Sie einen Singleton, um exportierteVariablen auf Paketebene zu deklarieren und zu initialisieren. Es gibt eine Initialisierungsinstanz für jede Variable auf Paketebene und nicht eine Instanz oder Initialisierung für jeden Import.
package sess import ( "sync" "time" ) type pool struct { lock sync.RWMutex sessions map[string]*session } var Pool = &pool{sessions: map[string]*session{}} func (p *pool) Set(sid string, s *session){ p.lock.Lock() defer p.lock.Unlock() p.sessions[sid] = s } func (p *pool) Get(sid string) (*session, bool){ p.lock.RLock() defer p.lock.RUnlock() s, ok := p.sessions[sid] return s, ok }
Das obige ist der detaillierte Inhalt vonEntwurfsmuster mit Singleton im Paket. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!