详解Go语言strconv与其他基本数据类型转换函数的使用
作者:陈明勇 发布时间:2024-04-23 09:42:17
前言
上篇文章 一文了解 Go 标准库 strings 常用函数和方法 介绍了 strings
标注库里的一些常用的函数和方法,本文也是以 string
类型为中心,通过 strconv
标准库,介绍其与其他基本数据类型相互转换的函数。
strconv
strconv
包提供了 string
类型与其他基本数据类型之间转换的函数,本文不会介绍其所有函数,如果想了解更多的小伙伴可以到 Go 包文档 查看。
string 与 int 之间的转换
Itoa:int 类型转 string 类型
Itoa(i int) string
参数
i
为待转换的数字。返回值为转换之后的字符串。
import (
"fmt"
"strconv"
)
func main() {
num := 16
str := strconv.Itoa(num)
fmt.Printf("类型:%T,值:%s", str, str) // 类型:string,值:16
}
Atoi:string 类型转 int 类型
Atoi(s string) (int, error)
函数的参数为待转换的字符串
返回值有两个,第一个是转换之后的整形数字,第二个是错误描述。
import (
"fmt"
"strconv"
)
func main() {
str := "666"
num, err := strconv.Atoi(str)
if err != nil {
fmt.Println("err: ", err.Error())
return
}
fmt.Printf("类型:%T,值:%d", num, num) // 类型:int,值:666
}
此函数与 Itoa
函数相比,多了一个 error
返回值,是因为如果是传入的字符串无法转成数字,例如 1a1
,此函数就会返回 NumError
错误,而 Itoa
函数,无论传入的是什么样的数字,都可以转为 string
,因此在转换的过程中没有 error
的说法。
FormatInt:将数字转成指定进制数并以 string 类型返回
FormatInt(i int64, base int) string
第一个参数为指定数字,类型为
int64
第二个参数为指定进制
第三个参数为数字转成指定进制数后的字符串
import (
"strconv"
)
func main() {
var num int64 = 2
str := strconv.FormatInt(num, 2)
var num2 int64 = 17
str2 := strconv.FormatInt(num2, 16)
println(str) // 10
println(str2) // 11
}
上述代码实现了将数字 2
转成二进制的形式 10
,将数字 17
转成十六进制的形式 11
,并以 string 类型返回。上述数字皆代表着有符号为的 int64
类型,与之对应的还有无符号位的 uint64
类型的转换函数 FormatUint
。
ParseInt:给定基数(进制数)和位数,返回对应十进制的值
ParseInt(s string, base int, bitSize int) (i int64, err error)
第一个参数
s
为待解析的字符串第二个参数
base
为基数,也就是进制数,从0
、2
到36
进制。第三个参数
bitSize
为位数,0
、8
、16
、32
、64
位分别对应int
、int8
、int16
、int32
、int64
。如果bitSize
小于0
或大于64
,则返回错误。第一个返回值
i
为转换之后的数字第二个返回值
err
为转换时产生的错误信息,除了bitSize
小于0
或大于64
,会发生错误以外,如果所传的字符串s
与base
参数或bitSize
参数不匹配,也会发生错误。
import (
"fmt"
"strconv"
)
func main() {
parseInt, err := strconv.ParseInt("100", 2, 64)
if err != nil {
fmt.Println(err.Error())
return
}
println(parseInt) // 4
parseInt2, err := strconv.ParseInt("666", 2, 64)
if err != nil {
fmt.Println(err.Error()) // strconv.ParseInt: parsing "666": invalid syntax
return
}
println(parseInt2)
}
首先将二进制的 100
转成十进制,为 4
,然后将二进制的 666
转成十进制,但是二进制所对应的数字没有 666,因此转换错误,返回 strconv.ParseInt: parsing "666": invalid syntax
错误信息。与之对应的还有返回无符号位的 uint64
类型的转换函数 ParseUint
。
string 与 float 之间的转换
ParseFloat:字符串类型转浮点型类型
ParseFloat(s string, bitSize int) (float64, error)
第一个参数
s
为带转换的字符串。第二个参数为
bitSize
为转换后的位数,32
代表float32
,64
代表float64
。第一个返回值为转换后的浮点型数字。
第二个返回值为转换过程中所产生的错误
import (
"fmt"
"strconv"
)
func main() {
num, err := strconv.ParseFloat("11.05", 64)
if err != nil {
return
}
fmt.Println(num)
}
如果传入的 s
的语法错误如 1s1
,则转换失败,返回 error
。
FormatFloat:根据格式 fmt 和精度 prec 将浮点数 f 转换为字符串
FormatFloat(f float64, fmt byte, prec, bitSize int) string
第一个参数
f
为待转换的浮点数。第二个参数为格式,可选值有
b e E f g G x X
。第三个参数
prec
为精度,精确到几位小数。返回值为转换后的字符串。
import (
"fmt"
"strconv"
)
func main() {
str := strconv.FormatFloat(5.26, 'f', 1, 64)
fmt.Println(str) // 5.3
}
FormatFloat
函数会对结果值进行四舍五入计算。
string 与 bool 之间的转换
ParseBool:字符串转布尔值
ParseBool(str string) (bool, error)
第一个参数
str
为待转换的字符串第一个返回值为转换之后的
bool
值第二个返回值为转换时所产生的错误。
import (
"fmt"
"strconv"
)
func main() {
bool1, err := strconv.ParseBool("true")
if err != nil {
fmt.Println(err.Error())
return
}
fmt.Println(bool1) // true
bool2, err := strconv.ParseBool("golang")
if err != nil {
fmt.Println(err.Error()) // strconv.ParseBool: parsing "golang": invalid syntax
return
}
fmt.Println(bool2)
}
第一个字符串 true
转布尔值成功了,但是第二个字符串 golang
转布尔值失败了,因为 bool
类型的可选值只有 true
和 false
,其他值无法转成布尔值。
FormatBool:布尔值转字符串
FormatBool(b bool) string
参数
b
为带转换的布尔值。返回值为转换之后的字符串。
import (
"fmt"
"strconv"
)
func main() {
boolStr := strconv.FormatBool(true)
fmt.Println(boolStr) // "true"
}
小结
本文对 string
与 int
类型、float
类型和 bool
类型相互之间转换的函数进行介绍,掌握这些函数的用法,应对开发中 string
类型与其他基本数据类型转换的场景不成问题。
来源:https://juejin.cn/post/7171838318378745892
猜你喜欢
- 为了保障数据的安全,需要定期对数据进行备份。备份的方式有很多种,效果也不一样。一旦数据库中的数据出现了错误,就需要使用备份好的数据进行还原恢
- 一.图像漫水填充图像漫水填充(FloodFill)是指用一种特定的颜色填充联通区域,通过设置可连通像素的上下限以及连通方式来达到不同的填充效
- 建立池连接可以显著提高应用程序的性能和可缩放性。SQL Server .NET Framework 数据提供程序自动为 ADO.NET 客户
- 一、使用copula生成合成数据集(synthetic dataset)1. 三维数据描述建立一个三维数据表,查看三维数据的散点
- 算法介绍迪科斯彻算法使用了广度优先搜索解决赋权有向图或者无向图的单源最短路径问题,算法最终得到一个最短路径树。该算法常用于路由算法或者作为其
- 本文实例讲述了python异常和文件处理机制。分享给大家供大家参考,具体如下:1 异常处理Python的异常用tryexceptfinall
- 方法一:<script language="JavaScript"> <!--
- 1 慢查询定义指mysql记录所有执行超过long_query_time参数设定的时间阈值的SQL语句。慢查询日志就是记录这些sql的日志。
- 本文为大家分享了pygame游戏之旅的第10篇,供大家参考,具体内容如下通过获取鼠标的位置然后进行高亮显示:mouse =pygame.mo
- 安装paramiko后,看下面例子:import paramiko#设置ssh连接的远程主机地址和端口t=paramiko.Transpor
- 前言推导式是从一个或者多个迭代器快速创建序列的一种方法。它可以将循环和条件判断结合,从而避免冗长的代码。推导式是典型的 Python 风格P
- 语言的内存管理是语言设计的一个重要方面。它是决定语言性能的重要因素。无论是C语言的手工管理,还是Java的垃圾回收,都成为语言最重要的特征。
- 首先,把这个“功能”包含到页首:<!--#include virtual="/readini/inifile.in
- 这篇文章主要介绍了微信小程序 textarea 层级过高问题解决方案,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习
- 关于vue的过渡效果,vue官方给的概述是这样的。Vue 在插入、更新或者移除 DOM 时,提供多种不同方式的应用过渡效果。包括以下工具:1
- 本文实例讲述了Python使用Matplotlib实现雨点图动画效果的方法。分享给大家供大家参考,具体如下:关键点win10安装ffmpeg
- mysql脏页由于WAL机制,InnoDB在更新语句的时候,制作了写日志这一个磁盘操作,就是redo log,在内存写完redo log后,
- 1、安装pecl及创建快捷键(若安装php时已带可忽略这步安装步骤)# cd /usr/local/php/bin/ //可查看
- SQL Server 2008“阻止保存要求重新创建表的更改”的错误的解决方案是本文我们主要要介绍的内容,情况是这样的:我们在用SQL Se
- 什么是 YARPYARP (另一个反向代理) 设计为一个库,提供核心代理功能,你可以根据应用程序的特定需求进行自定义。YARP 是使用 .N