Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/go/7.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/svg/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Golang字符串到uint_Go - Fatal编程技术网

Golang字符串到uint

Golang字符串到uint,go,Go,在我的项目中,ID被设计为snowflakeid。前端向我传递一个字符串,数据库存储为bigint。这意味着在存储它之前,需要将其转换为uint。请告诉我怎么办? 演示数据: m := "156343853366906880" 我的代码: 预期的结果是准确的,并且不会丢失准确性。strconv.parseUint()的第三个参数是位大小。19位不足以表示数字15634853366906880。因此,该方法返回一个错误。(通过将其分配给,您将忽略该选项) 2^19-1=5

在我的项目中,ID被设计为snowflakeid。前端向我传递一个字符串,数据库存储为bigint。这意味着在存储它之前,需要将其转换为uint。请告诉我怎么办? 演示数据:

m := "156343853366906880"

我的代码:

预期的结果是准确的,并且不会丢失准确性。
strconv.parseUint()的第三个参数是
位大小。19位不足以表示数字
15634853366906880
。因此,该方法返回一个错误。(通过将其分配给
,您将忽略该选项)

2^19-1=524287是可以用19位表示的最大无符号数

以位大小传递64:

m := "156343853366906880"
u, err := strconv.ParseUint(m, 0, 64)
if err == nil {
    fmt.Print(u)
    //156343853366906880
}
如果您的数字将大于
uint64
请使用
big.Int

是基于时间的64位唯一id。由于需要将字符串转换为64位数字,
strconv.ParseUint()
非常好。参见,参考号为

在代码中,使用19作为位大小。不要将其与前端字符串表示的整数(无符号)中的位数混用

要将64位雪花ID(字符串)转换为64位无符号整数,请使用64作为位大小参数

U,err:=strvonv.ParseUint(s,0,64)
如果出错!=零{
//处理错误。。。
}
当错误真的很重要时,也不要试图忽略它


你还没问问题。对不起,这是我的问题,我的英语不好
m := "156343853366906880"
_, err := strconv.ParseUint(m, 0, 19)
fmt.Println(err)
//strconv.ParseUint: parsing "156343853366906880": value out of range 524287
m := "156343853366906880"
u, err := strconv.ParseUint(m, 0, 64)
if err == nil {
    fmt.Print(u)
    //156343853366906880
}