strconv
库是go官方提供的一个标准包,主要用于字符串相关的处理。通过参考官方文档、中文文档和其他工具,进行学习记录。学习重点是其中的内置方法。
本文分为Atoi
,Format
系列,Parse
系列,Append
系列,Quote
系列进行学习。
Atoi
和Itoa
这两个函数主要用于string和int类型的互转,算是个人而言用的比较多的。
int类型转换为string类型
var m int = 42
var n string = strconv.Itoa(m)
string类型转换为int类型:
var s string = "123"
var t int, err = strconv.Atoi(s)
if err != nil {
// 处理错误
}
Format
系列Format
系列主要是用于将各种类型转换为字符串类型。其系列一共有五种函数:
FormatBool()
b := true
str := strconv.FormatBool(b)
fmt.Println(str) // Output: "true"
FormatInt()
i := 42
str := strconv.FormatInt(int64(i), 10) // 10表示十进制
fmt.Println(str) // Output: "42"
FormatFloat()
f := 3.14159
str := strconv.FormatFloat(f, 'f', -1, 64) // 'f'表示普通浮点数格式,-1表示最小精度,64表示位数
fmt.Println(str) // Output: "3.14159"
FormatUint()
u := uint(42)
str := strconv.FormatUint(uint64(u), 10) // 10表示十进制
fmt.Println(str) // Output: "42"
FormatComplex()
c := complex(3, 4)
str := fmt.Sprintf("%f", real(c)) + "+" + fmt.Sprintf("%f", imag(c)) + "i"
fmt.Println(str) // Output: "3.000000+4.000000i"
Parse
系列与Format
系列相反,Parse
系列主要是用于将字符串格式化为各种数据类型。
其系列一共有五种函数:
需要特别注意的是:Parse
在使用时需要注意处理错误。比较转字符串没啥难度,但字符串不规范,就很难转成预期的形式了。
此部分就不写怎么用了,具体请见官方文档。
Append
系列Append系列主要有下图的方法。主要作用是将一个xx类型的参数,转换为byte之后再追加到一个[]byte之后。用途主要是需要使用到[]byte时,比如需要将我的数据转换为[]byte,输出到日志或发送json等。
这里拿AppendFloat
函数举例:
其源码为
// AppendFloat appends the string form of the floating-point number f,
// as generated by FormatFloat, to dst and returns the extended buffer.
func AppendFloat(dst []byte, f float64, fmt byte, prec, bitSize int) []byte {
return genericFtoa(dst, f, fmt, prec, bitSize)
}
// bigFtoa uses multiprecision computations to format a float.
func genericFtoa(dst []byte, val float64, fmt byte, prec, bitSize int) []byte {
//此部分太长了,因此省略。
//具体代码见文档:ftoa.go,57行。
//其主要实现了对数据的预处理
//之后调用了formatDigits函数
}
func formatDigits(dst []byte, shortest bool, neg bool, digs decimalSlice, prec int, fmt byte) []byte {
//见ftoa.go,199行。
//主要是进行判断调用后, return append(dst, '%', fmt)追加到后方
}
使用示例:
func main() {
var slice []byte
slice = strconv.AppendFloat(slice, 3.14159, 'f', -1, 64) // 'f'表示普通浮点数格式,-1表示最小精度,64表示位数
fmt.Println(slice)
fmt.Println(string(slice)) // Output: "3.14159"
}
Queto
系列Queto
系列主要有下图的方法。主要是用于处理字符串的引号转义等场景
例如Queto
方法,该方法就是给字符串加一个双引号,在打日志等输出场景可能有用。
func main() {
a := "你好,我是climber"
s := strconv.Quote(a)
fmt.Println(a)
fmt.Println(s)
}
之后还有诸如QuoteToASCII()
方法, 会对字符串中的非ASCII字符进行转义处理,确保生成的字符串是符合ASCII标准的。
QuoteRune()
和 QuoteRuneToASCII()
:用于将 Unicode 字符转换为带单引号的字符串字面量表示形式。
QuoteRuneToGraphic()
:用于将 Unicode 字符转换为带双引号的可打印字符串字面量表示形式。
其余不再例举,具体见官方文档。
strconv
官方文档当然还是官方文档才是yyds…详细请见:
https://pkg.go.dev/strconv
https://pkg.go.dev/strconv