在使用strconv.parselnt时,如果返回值是赋值给一个int变量,那么参数中的bitSize填0的话,会报错。必须把之前的变量声明为确定位数的整型(int8、int16、int32、int64),还要填入对应的数值(int8对应8,int16对应16)。 但是像这样 fmt.Println(strconv.ParseInt(字符串, 10, 0)) 直接在另一个函数内调用的却可以填入0,谁能帮忙解释一下。
有疑问加站长微信联系(非本文作者)

在使用strconv.parselnt时,如果返回值是赋值给一个int变量,那么参数中的bitSize填0的话,会报错。必须把之前的变量声明为确定位数的整型(int8、int16、int32、int64),还要填入对应的数值(int8对应8,int16对应16)。 但是像这样 fmt.Println(strconv.ParseInt(字符串, 10, 0)) 直接在另一个函数内调用的却可以填入0,谁能帮忙解释一下。
有疑问加站长微信联系(非本文作者)
入群交流(和以上内容无关):加入Go大咖交流群,或添加微信:liuxiaoyan-s 备注:入群;或加QQ群:692541889
`单行代码`
func ParseInt(s string, base int, bitSize int) (i int64, err error)
你最好贴一下你你的代码,这样好判断。 估计你的错误是这样:
a:=strconv.ParseInt(字符串,10,0)
因为ParseInt有两个返回值,你只赋值了一个,所以编译会报错。应该这样:
a,_:=strconv.ParseInt(字符串,10,0)
像这样
fmt.Println(strconv.ParseInt(字符串, 10, 0))
不会报错,是因为你打打印出了两个值,你可以看一下你最后的输出,是不是有两个:数值 <nil>
1楼 @eric160 package main
import ( "fmt" "strconv" )
func main() {
} 这是代码。 已经是忽略了error的值了的,可是还是会报错 ./hello.go:13:9: cannot assign int64 to num (type int) in multiple assignment
strconv.ParseInt本来返回第一个参数就是int64类型啊
上面2中用法没毛病
那就是说只有在声明n的时候定义n是int64时,才能在参数中直接填0,而且还要求系统是64位的才行。 可是strconv.ParseInt的说明中写0值对应int,n定义为int时,就会报错。这样的话,我就不太理解为什么会这样了
这个和填0没什么关系。。该方法返回值就是int64啊。所以要用int64的变量接收。可以看看源码,里面有说明额。
谢谢你的解答。目前我看源码还是有些困难。 在我的代码中 var str = "29" var num int32
num是int32,参数中也是32,可是依然报错
如果num定义为int64,那么参数中填入0或64都是没有问题的。
这样看来,并不像文档中所说0对应int,8对应int8,32对应int32。而是默认int64。
那么在fmt.Println(strconv.ParseInt(str, 10, 0))这个语句中没有出现问题,只能是Println函数接收的值也是int64,。
可是go是根据系统是32位还是64位来确定int型是几位的。那这样的情况下,把变量声明为int,编译不过的问题不就会特别多?go语言的设计者不应该想不到这样的问题呀,所以我认为是我理解错了,只是找不到原因
@jan-bar 看了你的回答我才弄懂,谢谢谢谢。