Go 语言类型转换的陷阱

Go 语言作为强类型语言,在使用 Golang 开发项目时,经常会遇到类型转换的场景,整型之间可以直接转换,字节切片和字符串之间也可以直接转换。,但是,如果整型和字符串之间做类型转换,则需要使用 strconv 标准库提供的函数。,Go 语言标准库 strconv[1] 提供了一些类型转换的函数,比如在项目开发中使用比较多的整型和字符串之间的类型转换。,输出结果:,阅读上面这段代码,我们使用标准库 strconv 将整型变量 salary 转换为字符串类型变量 salaryStr;将字符串类型变量 age 转换为整型变量 ageInt。,但是,读者朋友们有没有发现一个问题,我们使用标准库 strconv 提供的函数 Atoi 将字符串类型变量转换为整型变量,得到的是 int 类型,如果我们需要得到一个 int8 类型的变量,我们需要继续做类型转换,例如:,也就是说,如果我们需要将一个字符串类型的变量转换为一个非 int 类型的整型变量,需要做二次转换,在实际项目开发中,使用起来稍微繁琐一些。,此外,使用标准库 strconv 做类型转换,除了在一些场景中稍微繁琐之外,还有另外一个问题,我们先阅读以下一段代码。,输出结果:,阅读上面这段代码输出的错误信息 value out of range,也就是说如果我们需要转换的值超出返回,Go 语言标准库 strconv 提供的函数 Atoi 会返回错误。,所以,在使用函数 Atoi 时,我们要做好参数验证和错误处理。,有没有使用更简单的类型转换库,接下来,我们来看一下流行的三方库 cast。,Go 类型转换的三方库 cast 是一个使用比较多的库,我们使用 cast[2] 来处理 Part02 的类型转换需求,代码如下:,输出结果:,阅读上面这段代码,我们可以发现,使用 cast 可以直接将字符串类型的变量转换为我们需要的整型变量,使用起来不再感到繁琐。,同时,需要注意的是,如果转换失败,将返回类型零值,字符串类型变量 phoneNumber2 在使用 cast 转换为 int 类型的变量时,返回的结果就是 int 的类型零值。,使用 cast 比使用 strconv 更简单,而且不需要处理错误。但是,cast 还有一个陷阱,我们需要特别注意一下,我们先阅读以下一段代码:,输出结果:,阅读上面这段代码的输出结果,我们可以发现使用 cast 将字符串类型 month 和 month2 转换为整型时,字符串是以 “0” 开头的月份,”07″ 转换后得到整型 7,而 “08” 转换后得到整型 0。,我们再使用 strconv 转换 “08”,代码如下:,输出结果:,读者朋友们从输出结果可以看到,”08″ 使用 strconv 转换后得到整型 8,所以我们在转换以一个或多个 “0” 开头的字符串为整型时,字符串 “0” 后面的数值大于 7 将不能使用 cast 转换,最好就是在转换以一个或多个 “0” 开头的字符串为整型时,比如 “08”、”009″、”00010″ 等,使用 strconv 转换,而不要使用 cast 转换。,本文我们介绍 Go 语言类型转换的两个库,分别是标准库 strconv 和三方库 cast,其中 cast 更方便、更安全,但是也有陷阱,我们需要特别注意,避免在项目开发中掉进陷阱。

文章版权声明

 1 原创文章作者:cmcc,如若转载,请注明出处: https://www.52hwl.com/27129.html

 2 温馨提示:软件侵权请联系469472785#qq.com(三天内删除相关链接)资源失效请留言反馈

 3 下载提示:如遇蓝奏云无法访问,请修改lanzous(把s修改成x)

 免责声明:本站为个人博客,所有软件信息均来自网络 修改版软件,加群广告提示为修改者自留,非本站信息,注意鉴别

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2023年6月23日
下一篇 2023年7月15日