go 언어를 사용 할때 자주 쓰게 되는 코드 패턴들. serial ID 생성
By SeukWon Kang
package id
var genCh chan int64
func init() {
genCh = make(chan int64)
go func() {
var i int64
for {
i++
genCh <- i
}
}()
}
func GenCh() <-chan int64 {
return genCh
}
과 같이 쓰면 goroutine safe 한 id 생성기를 사용할수 있습니다.
실제 위 코드는 goguelike 의 id module의 일부 코드이기도 합니다.
사용할때는
objid := <-id.GenCh()
과 같은 형태를 사용하면 됩니다.
genCh 변수를 글로벌 변수 GenCh로 선언하지 않고 로컬 변수로 선언 한것은 다른 모듈에서 수정할 가능성을 막기 위해서 이며,
모듈이 초기화 될때 자동으로 실행되는 init() 함수에서 genCh의 생성및 id 생성용 goroutine을 실행합니다.
이 goroutine은 init 함수 내에만 존재하며 프로그램 종료시까지 계속 실행되고 외부와의 커뮤니케이션은 GenCh함수가 돌려주는 channel을 통해서만 이루어 집니다.
ps) 2015-02-14 추가 github에 코드를 올렸습니다. https://github.com/kasworld/idgen