출처: https://qiita.com/kwashi/items/3be0767168075cb7e3f0

Golang에서 아래와 같은 문자열 유니크 ID를 만드는 방법을 설명한다.

  0000XSNJG0MQJHBF4R33AHWHGX

oklog/ulid 라는 golang 라이브러리를 사용한다.

Git: k-washi/bss-utils/uniquegenerator

프로그램

아래의 프로그램처럼 시간에 의존한 유니크 ID를 만들고 있다. 또 Validation 도 만들었다.

package uniquegenerator

import (
   
"errors"
   
"math/rand"

   
"github.com/oklog/ulid/v2"

   
"time"
)

var (
   t       = time.Unix(
1000000, 0)
   entropy = ulid.Monotonic(rand.New(rand.NewSource(t.UnixNano())),
0)
)

//generateUlid ex. output: 0000XSNJG0MQJHBF4QX1EFD6Y3
func generateUlid() ulid.ULID {
   
return ulid.MustNew(ulid.Timestamp(t), entropy)
}

//Get ex. output: 0000XSNJG0MQJHBF4QX1EFD6Y3
func Get() string {
   
return generateUlid().String()
}

//Validation ulid string check size
func Validation(id string) error {
   
if len(id) != ulid.EncodedSize {
       
return errors.New("Unique ID generator validation error: length is not match")
   }
   
return nil
}