Skip to main content

Example 2

package main

import (
"fmt"
"sync"
)

var once sync.Once

type single struct {
}

var singleInstance *single

func getInstance() *single {
if singleInstance == nil {
once.Do(
func() {
fmt.Println("Creating single instance now.")
singleInstance = &single{}
})
} else {
fmt.Println("Single instance already created.")
}

return singleInstance
}
package main

import (
"fmt"
)

func main() {

for i := 0; i < 30; i++ {
go getInstance()
}

// Scanln is similar to Scan, but stops scanning at a newline and
// after the final item there must be a newline or EOF.
fmt.Scanln()
}
Creating single instance now.
Single instance already created.
Single instance already created.