Go 编程 | 连载 06 - 基本数据类型转换(strconv)

简介: Go 编程 | 连载 06 - 基本数据类型转换(strconv)

二、 strconv 标准库实现的基本数据类型转换

紧接上文 Go 编程 | 连载 05 - 基本数据类型转换

ParseFloat()

ParseFloat() 可以将字符串转换为 float 类型,由于 float 类型分为 float32 和 float64,所有 ParseFloat() 有两个参数,第一个参数为 string,第二个参数就是 bitSize,既要转换成 float32(32 个二进制位 bit,占 4 个字节) 还是 float64(64 个二进制位 bit,占 8 个字节)。

与 ParseBool() 函数一样,ParseFloat 函数也返回两个值,一个是转换之后的 float64 类型的值,另一个是转换时的错误。

func main() {
   // ParseBool 函数
   float_data_01, err_01 := strconv.ParseFloat("3.14", 64)
   fmt.Printf("转换错误信息:%v, 转换后 float_data_01 变量的类型是:%T, 值为:%v\n", err_01, float_data_01, float_data_01)
   float_data_02, err_02 := strconv.ParseFloat("3", 64)
   fmt.Printf("转换错误信息:%v, 转换后 float_data_02 变量的类型是:%T,值为:%v\n", err_02, float_data_02, float_data_02)
   float_data_03, err_03 := strconv.ParseFloat("stark", 64)
   fmt.Printf("转换错误信息:%v, 转换后 float_data_03 变量的类型是:%T\n", err_03, float_data_03)
   float_data_04, err_04 := strconv.ParseFloat("NaN", 64)
   fmt.Printf("转换错误信息:%v, 转换后 float_data_04 变量的类型是:%T, 值为:%v\n", err_04, float_data_04, float_data_04)
   float_data_05, err_05 := strconv.ParseFloat("Inf", 64)
   fmt.Printf("转换错误信息:%v, 转换后 float_data_04 变量的类型是:%T, 值为:%v\n", err_05, float_data_05, float_data_05)
}
复制代码

执行上述代码,输出结果如下:

转换错误信息:<nil>, 转换后 float_data_01 变量的类型是:float64, 值为:3.14
转换错误信息:<nil>, 转换后 float_data_02 变量的类型是:float64,值为:3
转换错误信息:strconv.ParseFloat: parsing "stark": invalid syntax, 转换后 float_data_03 变量的类型是:float64
转换错误信息:<nil>, 转换后 float_data_04 变量的类型是:float64, 值为:NaN
转换错误信息:<nil>, 转换后 float_data_04 变量的类型是:float64, 值为:+Inf
复制代码

ParseFloat() 函数可以识别 "NaN" 并转换为 float 类型而不报任何错误,查看源码注释

image.png

除了 "NaN" 之外,还有 "Inf""Infinity",这点要尤其注意。

ParseInt()

ParseInt() 函数可以将字符串转换为 int 类型的数据,该函数有三个参数,第一个是要转换的字符串;第二个参数是字符串所表示数字的进制形式,第三个参数是指要转换成 int8、int16、int32 或 int64 既所占的字节数大小。

ParseInt() 函数返回两个值,第一个是 int64 类型的整数,第二个是转换过程中的错误,如果 err 为 nil,说明转换成功。

image.png

func main() {
   // ParseInt()
   res, err := strconv.ParseInt("12", 8, 64)
   fmt.Printf("%v, %T, %v\n", res, res, err)
   res2, err2 := strconv.ParseInt("12", 16, 64)
   fmt.Printf("%v, %T, %v\n", res2, res2, err2)
   res3, err3 := strconv.ParseInt("zulu", 10, 64)
   fmt.Printf("%v, %T, %v\n", res3, res3, err3)
}
复制代码

执行上述代码,输出结果如下:

10, int64, <nil>
18, int64, <nil>
0, int64, strconv.ParseInt: parsing "zulu": invalid syntax
复制代码

如果转换出现问题,则会返回该类型的初识值,int 类型的初始值就是 0。

如果第二个参数为 0, ParseInt() 函数也可以根据输入自动判断类型字符串所表示数字的进制形式

func main() {
   // ParseInt()
   res, err := strconv.ParseInt("012", 0, 64)
   fmt.Printf("%v, %T, %v\n", res, res, err)
   res2, err2 := strconv.ParseInt("0X12", 0, 64)
   fmt.Printf("%v, %T, %v\n", res2, res2, err2)
}
复制代码

执行上述代码,输出结果如下:

10, int64, <nil>
18, int64, <nil>
复制代码

Atoi() 函数

Atoi() 函数就等同于 ParseInt() 函数,可以将字符串转换为整数,并默认字符串所表示的整数为十进制,所以 Atoi() 函数只需要一个参数即可,那就是要转换的字符串。

该函数同样返回两个值,这两个返回值所表示的含义与 ParseInt() 的返回值的含义一致。

image.png

func main() {
   // Atoi()
   res, err := strconv.Atoi("100")
   fmt.Printf("%v, %T, %v\n", res, res, err)
   res2, err2 := strconv.ParseInt("12138", 0, 64)
   fmt.Printf("%v, %T, %v\n", res2, res2, err2)
}
复制代码

执行上述代码,输出结果如下:

100, int, <nil>
12138, int64, <nil>
复制代码

FormatXxx 函数

FormatXxx 形式的函数可以将 int、float、bool 类型转换为 string 类型,具体的转换函数有:FormatBool()、FormatFloat()、FormatInt()、FormatUint() 以及 Itoa()。

// 第一个参数表示要转换的整数,第二个表示转换成什么进制的形式
func FormatInt(i int64, base int) string {}
// 直接输出 bool 类型的值即可
func FormatBool(b bool) string {}
// 第一个参数表示要转换的 浮点数,第二个参数 fmt 表示格式,可选 'f', 'b'(二进制形式), 'e'(指数形式), 'E', 'g'(), 'G'
// 第三个参数表示精度,保留几位小数,第四个参数表示转成的类型所占字节大小,有 32 和 64
func FormatFloat(f float64, fmt byte, prec, bitSize int) string {}
复制代码
func main() {
   res := strconv.FormatInt(16, 10)
   fmt.Printf("%v, %T\n", res, res)
   res2 := strconv.FormatBool(false)
   fmt.Printf("%v, %T\n", res2, res2)
   res3 := strconv.FormatFloat(3.1415, 'f', 2, 64)
   fmt.Printf("%v, %T\n", res3, res3)
}
复制代码

执行上述代码,输出结果如下:

16, string
false, string
3.14, string
复制代码

Itoa() 函数

Itoa() 函数就等于 FormatInt() 函数的第二个参数为默认为 10

image.png

func main() {
   res := strconv.Itoa(16)
   fmt.Printf("%#v, %v, %T\n", res, res, res)
}
复制代码

执行上述代码,输出结果如下:

"16", 16, string



相关文章
|
12天前
|
Kubernetes Go Docker
在K8s编程中如何使用Go
一文带你了解在K8s编程中如何使用Go
33 3
|
1月前
|
数据库连接 Go API
Golang中的25个常见错误:更好地进行go编程的综合指南
Golang中的25个常见错误:更好地进行go编程的综合指南
|
28天前
|
消息中间件 存储 NoSQL
redis实战——go-redis的使用与redis基础数据类型的使用场景(一)
本文档介绍了如何使用 Go 语言中的 `go-redis` 库操作 Redis 数据库
redis实战——go-redis的使用与redis基础数据类型的使用场景(一)
|
19天前
|
Java 数据库连接 数据库
携手前行:在Java世界中深入挖掘Hibernate与JPA的协同效应
【8月更文挑战第31天】Java持久化API(JPA)是一种Java规范,为数据库数据持久化提供对象关系映射(ORM)方法。JPA定义了实体类与数据库表的映射及数据查询和事务控制方式,确保不同实现间的兼容性。Hibernate是JPA规范的一种实现,提供了二级缓存、延迟加载等丰富特性,提升应用性能和可维护性。通过结合JPA和Hibernate,开发者能编写符合规范且具有高度可移植性的代码,并利用Hibernate的额外功能优化数据持久化操作。
32 0
|
21天前
|
安全 Java 测试技术
Go 高性能编程心法探秘
文章深入探讨了Go语言在高性能编程中的各种技巧,包括常用数据结构的使用、内存管理、并发编程策略,以及如何通过减少锁的使用、有效利用sync包中的工具来优化程序性能。
13 0
|
21天前
|
Go C语言
Go语言:新时代的编程英雄,让你的代码驾驭未来!
【8月更文挑战第29天】Go,或称Golang,是由谷歌开发的一种静态强类型的编译语言,旨在融合C语言的高效性和高级语言的易用性。它简洁、优雅,广泛应用于高性能服务器和网络应用开发。本文将通过环境搭建、Hello World示例、变量、常量、控制结构、函数、结构体、接口及错误处理等示例,带你快速入门Go语言,领略其简洁高效的魅力,激发你的编程热情。
29 0
|
22天前
|
存储 编译器 Go
Go从入门到放弃之数据类型
Go从入门到放弃之数据类型
|
1月前
|
Go
【go笔记】标准库-strconv
【go笔记】标准库-strconv
|
1月前
|
网络协议 Go
【go笔记】TCP编程
【go笔记】TCP编程
|
9天前
|
程序员 Go PHP
为什么大部分的 PHP 程序员转不了 Go 语言?
【9月更文挑战第8天】大部分 PHP 程序员难以转向 Go 语言,主要因为:一、编程习惯与思维方式差异,如语法风格和编程范式;二、学习成本高,需掌握新知识体系且面临项目压力;三、职业发展考量,现有技能价值及市场需求不确定性。学习新语言虽有挑战,但对拓宽职业道路至关重要。
38 10