Golang 문자열을 uint로

Nov 14 2020

내 프로젝트에서 ID는 눈송이 모양으로 디자인되었습니다. 프런트 엔드는 나에게 문자열을 전달하고 데이터베이스 저장소는 bigint입니다. 이것은 저장하기 전에 uint로 변환해야 함을 의미합니다. 어떻게해야하는지 알려주세요. 데모 데이터 :

m := "156343853366906880"

내 코드 :
u, _ := strconv.ParseUint(m, 0, 19)

예상 결과는 정확하며 정확성을 잃지 않습니다.

답변

ShudiptaSharma Nov 14 2020 at 15:03

SnowflakeID 는 시간 기반 64 비트 고유 ID입니다. 문자열을 64 비트 숫자로 변환해야하므로 strconv.ParseUint()상당히 좋습니다. ParseUint 의 참조를 참조하십시오 .

코드에서 19를 비트 크기로 사용했습니다. 프런트 엔드의 문자열이 나타내는 정수 (부호 없음)의 자릿수와 혼합하지 마십시오.

64 비트 SnowflakeID (문자열)를 64 비트 부호없는 정수로 변환하려면 64를 bitSize 인수로 사용합니다.

U, err := strvonv.ParseUint(s, 0, 64)
if err != nil {
    // handle error... 
}

또한 정말로 중요한 경우 오류를 무시하지 마십시오.

1 Omkar76 Nov 14 2020 at 15:01

의 세 번째 매개 변수는 strconv.parseUint()입니다 bitSize. 19 비트는 숫자를 나타내는 데 충분하지 않습니다 156343853366906880. 따라서 메서드는 오류를 반환합니다. (에 할당하여 무시하고 있음 _)

m := "156343853366906880"
_, err := strconv.ParseUint(m, 0, 19)
fmt.Println(err)
//strconv.ParseUint: parsing "156343853366906880": value out of range 524287

2 ^ 19-1 = 524287은 19 비트로 표현할 수있는 가장 큰 부호없는 숫자입니다.

64를 bitSize로 전달 :

m := "156343853366906880"
u, err := strconv.ParseUint(m, 0, 64)
if err == nil {
    fmt.Print(u)
    //156343853366906880
}

귀하의 번호가 uint64사용 보다 클 경우 big.Int:

Go에서 큰 Int로 문자열?