Golang – Singleton Design pattern

RMAG news

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.

Leave a Reply

Your email address will not be published. Required fields are marked *