前言
上篇文章介绍了 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 类型与其他基本数据类型转换的场景不成问题。
本文参与了SegmentFault 思否写作挑战赛活动,欢迎正在阅读的你也加入。
**粗体** _斜体_ [链接](http://example.com) `代码` - 列表 > 引用。你还可以使用@来通知其他用户。