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天前
|
存储 编译器 Go
go语言中的变量、常量、数据类型
【11月更文挑战第3天】
29 9
|
12天前
|
数据采集 监控 Java
go语言编程学习
【11月更文挑战第3天】
30 7
|
17天前
|
Unix Linux Go
go进阶编程:Golang中的文件与文件夹操作指南
本文详细介绍了Golang中文件与文件夹的基本操作,包括读取、写入、创建、删除和遍历等。通过示例代码展示了如何使用`os`和`io/ioutil`包进行文件操作,并强调了错误处理、权限控制和路径问题的重要性。适合初学者和有经验的开发者参考。
|
25天前
|
Java 大数据 Go
Go语言:高效并发的编程新星
【10月更文挑战第21】Go语言:高效并发的编程新星
47 7
|
1月前
|
Go 数据处理 调度
Go语言中的并发模型:解锁高效并行编程的秘诀
本文将探讨Go语言中独特的并发模型及其在现代软件开发中的应用。通过深入分析 Goroutines 和 Channels,我们将揭示这一模型如何简化并行编程,提升应用性能,并改变开发者处理并发任务的方式。不同于传统多线程编程,Go的并发方法以其简洁性和高效性脱颖而出,为开发者提供了一种全新的编程范式。
|
1月前
|
并行计算 算法 搜索推荐
探索Go语言的高并发编程与性能优化
【10月更文挑战第10天】探索Go语言的高并发编程与性能优化
|
2月前
|
存储 JSON 安全
go语言编程系列(七)
go语言编程系列(七)
|
2月前
|
存储 编译器 Go
Go to Learn Go之基本数据类型
Go to Learn Go之基本数据类型
27 0
|
9天前
|
存储 JSON 监控
Viper,一个Go语言配置管理神器!
Viper 是一个功能强大的 Go 语言配置管理库,支持从多种来源读取配置,包括文件、环境变量、远程配置中心等。本文详细介绍了 Viper 的核心特性和使用方法,包括从本地 YAML 文件和 Consul 远程配置中心读取配置的示例。Viper 的多来源配置、动态配置和轻松集成特性使其成为管理复杂应用配置的理想选择。
30 2
|
8天前
|
Go 索引
go语言中的循环语句
【11月更文挑战第4天】
19 2