strconv
包在字符串和数值类型转换中非常重要,提供了字符串和基本数值类型之间的相互转换的功能。
基本数值类型转换
strconv 可以实现数值和字符串两种类型的相互转换:
strconv.Itoa(123) //整型转字符串
strconv.Atoi("123") //字符串转整型
支持的类型有 int、float、bool等。
转换语法
strconv 转换函数命名遵循 “源类型” To “目标类型” 的格式:
Itoa
: int 到 string
i := 123
s := strconv.Itoa(i)
fmt.Printf("%T %v\n", s, s) //string 123
Atoi
: string 到 int (ASCII to integer,将ASCII字符串转换为整数)
s := "456"
i, err := strconv.Atoi(s)
if err != nil {
fmt.Println(err)
} else {
fmt.Printf("%T %v\n", i, i) // int 456
}
指定进制的字符串转整数
num, err := strconv.ParseInt("1101", 2, 64) //strconv.ParseInt参数有三个:要转换的字符串,指定的进制,整数的位大小;返回两个值:转换后的整数和一个错误
if err != nil {
fmt.Println("解析错误")
} else {
fmt.Println(num)
}
// 输出:
// 13
FormatFloat
: float 到 string
f := 3.1415926
s := strconv.FormatFloat(f, 'f', 2, 64) //四个参数:要转换的浮点数值,转换的格式f为常规格式,精度,浮点数的位大小/64意思是float64
fmt.Printf("%T %v\n", s, s) // string 3.14
ParseBool
: string 到 bool
s := "true"
b, err := strconv.ParseBool(s)
if err != nil {
fmt.Println(err)
} else {
fmt.Printf("%T %v", b, b) // bool true
}
错误处理
大多数strconv在失败时会返回一个错误:
v, err := strconv.Atoi("abc")
if err != nil {
// 处理错误
}
Parse系列函数
Parse 函数会尝试转换整个字符串,并返回未转换的部分:
v, err := strconv.ParseInt("123abc", 10, 64)
这里 v 是123,err会指出有余下未转换的部分。
Format系列函数
Format 函数可以精细控制输出格式:
strconv.FormatFloat(3.14, 'f', 2, 64) // 小数点后2位
支持如精度、位长等。
Is系列函数
Is 函数用来判断一个字符串是否可以转换为指定类型:
strconv.IsDigit('1') // true
strconv.IsNumber("123") // true
Append系列函数
可以将转换后的值append到现有缓冲区:
buf := []byte("Prefix:")
strconv.AppendInt(buf, 123, 10)
避免多次拼接字符串。
Quote 与 Unquote
这俩实现了Go字符串语法与strcov字符串转换之间的转化,用于在字符串周围添加或移除引号,对于处理字符串中的特殊字符、转义序列和字符串字面值很有用。
strconv.Unquote(`"Hello"`) // Hello