Conceitualmente o padrão singleton define que somente uma instância deve existir em todo o sistema.
É como ter um guardião solitário que garante que apenas uma única cópia de si mesma esteja presente, independentemente de quantas vezes seja chamado.
Estou avançando nos estudos em golang e decidi mergulhar na implementação deste padrão tão debatido e controverso.
É aquele tipo de padrão que desperta paixões e críticas, amado por alguns como uma solução elegante e odiado por outros como um antipadrão a ser evitado a todo custo.
singleton.go
package main
import (
"fmt"
"sync"
)
var lock = &sync.Mutex{}
type singleton struct {
}
var singleInstance *singleton
func getInstance() *singleton {
if singleInstance == nil {
lock.Lock()
defer lock.Unlock()
if singleInstance == nil {
fmt.Println("create singleton")
singleInstance = &singleton{}
} else {
fmt.Println("singleton already created.")
}
} else {
fmt.Println("singleton already created.")
}
return singleInstance
}
main.go
package main
import (
"fmt"
)
func main() {
for i := 0; i < 3; i++ {
go getInstance()
}
fmt.Scanln()
}
Saída esperada
create singleton
singleton already created.
singleton already created.
Top comments (0)