본문 바로가기
DevOps/GoLang

Go UUID/GUID generator

by SeleniumBindingProtein 2023. 1. 10.
728x90
반응형

1. UUID

- UUID는 16 바이트 또는 128 바이트 숫자로 구성되어 있고, 생성된 UUID가 동일할 확률은 극히 드물다.

- UUID는 32개의 16진수로 표시되며, 하이픈으로 구분된 5부분으로 구성된다.

- 8-4-4-4-12의 형식으로 되어 있다.

1) github.com/google/uuid

package main

import (
    "fmt"
    "strings"
    "github.com/google/uuid"
)

func main() {
    uuidWithHyphen := uuid.New()
    fmt.Println(uuidWithHyphen)
    uuid := strings.Replace(uuidWithHyphen.String(), "-", "", -1)
    fmt.Println(uuid)
}

2) github.com/pborman/uuid

package main

import (
	"fmt"
	"strings"

	"github.com/pborman/uuid"
)

func main() {
	uuidWithHyphen := uuid.NewRandom()
	fmt.Println(uuidWithHyphen)
	uuid := strings.Replace(uuidWithHyphen.String(), "-", "", -1)
	fmt.Println(uuid)
}

3) 내장 라이브러리 - os/exec

package main
  
import (
    "fmt"
    "log"
    "os/exec"
)
  
func main() {
    newUUID, err := exec.Command("uuidgen").Output()
    if err != nil {
        log.Fatal(err)
    }
    fmt.Println("Generated UUID:")
    uuid := strings.Replace(newUUID.String(), "-", "", -1)
    fmt.Printf("%s", uuid)
}

 

2. GUID

- 매 초마다 다른 GUID 보장

- 머신마다 다른 GUID  보장

- 같은 머신 내에서 프로세스가 생성될때마다 다른 GUID  보장

- 1 내에 최대 24bit 만큼의 다른 GUID 생성 보장

- xid.New() 라고 하면 12 바이트의 []byte  생성된다.

- xid.New().String() 이라고 하면 20 바이트의 String  생성된다.

package main

import(
	"fmt"
    "time"
    
    "github.com/rs/xid"
)

func main() {

	for i:=0; i<10; i++{
    
    	tmpByte := xid.New()
        tmpGUID := tmpByte.String()
        
        // fmt.Println(tmpGUID)
        fmt.Printf("%08b, %d, %s, %d, %T, %T\n", tmpByte, len(tmpByte), tmpGUID, len(tmpGUID), tmpByte, tmpGUID)
    }
}
728x90
반응형

'DevOps > GoLang' 카테고리의 다른 글

Go AES-256 암호화  (1) 2023.01.10
Go 구조체 & 포인터 & 슬라이스 & 맵  (0) 2023.01.08
Go 반복문 & 제어문  (0) 2023.01.08
Go 변수 & 상수  (1) 2023.01.02
Go 데이터 타입  (0) 2023.01.02

댓글