Golang-strconv库学习笔记

本文介绍了Go语言中strconv库的关键功能,包括Atoi和Itoa的字符串与整数转换,Format系列(如FormatBool至FormatComplex)的格式化操作,Parse系列的字符串解析,以及Append和Quote系列用于字节序列化的实用函数。着重讲解了错误处理和示例应用。
摘要由CSDN通过智能技术生成

前言:

strconv库是go官方提供的一个标准包,主要用于字符串相关的处理。通过参考官方文档、中文文档和其他工具,进行学习记录。学习重点是其中的内置方法。
本文分为AtoiFormat系列,Parse系列,Append系列,Quote系列进行学习。

AtoiItoa

这两个函数主要用于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

  • 8
    点赞
  • 9
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值