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로 문자열?