"Go 싱글턴"의 두 판 사이의 차이

잔글 (Jmnote님이 Go 싱글톤 문서를 Go 싱글턴 문서로 이동했습니다)
 
(같은 사용자의 중간 판 7개는 보이지 않습니다)
2번째 줄: 2번째 줄:
;Go 싱글톤
;Go 싱글톤


<syntaxhighlight lang='go' multi>
<syntaxhighlight lang='go' multi file="single.go">
package main
package main


import (
import (
    "fmt"
"fmt"
    "sync"
"sync"
)
)


type single struct {}
var singleInstance *single
var once sync.Once
var once sync.Once
type single struct {
}
var singleInstance *single
func getInstance() *single {
func getInstance() *single {
    if singleInstance == nil {
if singleInstance == nil {
        once.Do(
once.Do(
            func() {
func() {
                fmt.Println("Creating single instance now.")
singleInstance = &single{}
                singleInstance = &single{}
})
            })
}
    } else {
return singleInstance
        fmt.Println("Single instance already created.")
    }
 
    return singleInstance
}
}
</syntaxhighlight>
</syntaxhighlight>
<syntaxhighlight lang='go' multi>
<syntaxhighlight lang='go' multi file="main.go" main>
package main
package main


import (
import "time"
    "fmt"
)


func main() {
func main() {
 
for i := 0; i < 9; i++ {
    for i := 0; i < 9; i++ {
go getInstance()
        go getInstance()
}
    }
}
}
</syntaxhighlight>
</syntaxhighlight>
49번째 줄: 38번째 줄:
* [[싱글톤]]
* [[싱글톤]]
* [[Go 디자인패턴]]
* [[Go 디자인패턴]]
==참고==
* https://refactoring.guru/design-patterns/singleton/go/example#example-1

2023년 4월 17일 (월) 13:17 기준 최신판

1 개요[ | ]

Go 싱글톤
package main

import (
	"fmt"
	"sync"
)

type single struct {}
var singleInstance *single
var once sync.Once
func getInstance() *single {
	if singleInstance == nil {
		once.Do(
			func() {
				singleInstance = &single{}
			})
	}
	return singleInstance
}
package main

import "time"

func main() {
	for i := 0; i < 9; i++ {
		go getInstance()
	}
}

2 같이 보기[ | ]

3 참고[ | ]

문서 댓글 ({{ doc_comments.length }})
{{ comment.name }} {{ comment.created | snstime }}