[gogf/gf]gconv.Int和标准库(strconv.Atoi)的结果不一致

2024-07-09 923 views
1

Go版本 1.15.3 darwin adm64

GoFrame版本 v1.15.6

numStr := "0120"
numInt, _ := strconv.Atoi(numStr)
g.Log().Line(true).Println("numInt by strconv", numInt)
g.Log().Line(true).Println("numInt by gconv.Int", gconv.Int(numStr))

在标准库中numInt=120

gconv.Int("0120")=80

回答

2

终于有人跟我有同样的发现了...被当做8进制给处理掉了.

7

是的,8进制

8

@chenall @arieslee @LonelySally 是的,gconv包有对字符串参数做自动进制检测,具体可以参考文档 https://goframe.org/pages/viewpage.action?pageId=1114317 ,这一点和标准库的strconv包逻辑不一致,经过仔细考虑,仍旧保留了该特性。

5

可以在gconv出一个strconv.Atoi的别名方法 直接调用strconv.Atoi.