strconv使用指南

String Conversion,字符串转换

strconv 是 Go 语言标准库中的一个「包」,提供了将字符串与基本数据类型(如整数、浮点数、布尔值)之间相互转换的功能。

  • atoi.go:包含从 ASCII 字符串到整数(Integer)的转换函数。
  • atof.go:包含从 ASCII 字符串到浮点数(Float)的转换函数。
  • itoa.go:包含从整数(Integer)到 ASCII 字符串的转换函数。
  • ftoa.go:包含从浮点数(Float)到 ASCII 字符串的转换函数。
  • atob.go:包含从 ASCII 字符串到布尔值(Boolean)的转换函数。
  • atoc.go:包含从 ASCII 字符串到字符(Character)的转换函数。
一、常用系列
  1. AtoiItoa:用于将整数(10进制)与字符串之间进行转换。

    “askii to int” 「and」 “int to askii”,该函数较为常用,故“封装”了出来。

    • Atoi(字符串到整数):func Atoi(s string) (int, error)。此函数将字符串形式的整数转换为 int 类型。如果字符串无法表示为整数,则会返回错误,这是一个简化的 ParseInt 函数,用来表示特定的十进制场景
    • Itoa(整数到字符串):func Itoa(i int) string。此函数将 int 类型的整数转换为字符串形式。此函数将 int 类型的整数转换为十进制字符串表示,这是一个简化的 FormatInt 函数,主要用于处理十进制整数。
    // 源码
    // Itoa is equivalent to FormatInt(int64(i), 10).
    func Itoa(i int) string {
    	return FormatInt(int64(i), 10)
    }
    
二、Parse/Format系列
  1. ParseIntFormatInt:用于将字符串与带符号整数(只允许2-36进制)之间进行转换。

    • ParseIntfunc ParseInt(s string, base int, bitSize int) (i int64, err error)。此函数将字符串形式的整数转换为指定进制(如 10 进制、16 进制)和位大小(如 32 位、64 位)的 int64 类型。如果字符串无法表示为整数或超出指定位大小的范围,则会返回错误。

    • FormatIntfunc FormatInt(i int64, base int) string。此函数将 int64 类型的整数转换为指定进制的字符串形式。

  2. ParseUintFormatUint:用于将字符串与无符号整数之间进行转换。

    • ParseUintfunc ParseUint(s string, base int, bitSize int) (uint64, error)。此函数与 ParseInt 类似,但用于处理无符号整数。

    • FormatUintfunc FormatUint(i uint64, base int) string。此函数与 FormatInt 类似,但用于处理无符号整数。

  3. ParseFloatFormatFloat:用于将字符串与浮点数之间进行转换。

    • ParseFloatfunc ParseFloat(s string, bitSize int) (float64, error)。此函数将字符串形式的浮点数转换为指定位大小(32 位或 64 位)的 float64 类型。如果字符串无法表示为浮点数,则会返回错误。

    • FormatFloatfunc FormatFloat(f float64, fmt byte, prec int, bitSize int) string。此函数将 float64 类型的浮点数转换为字符串形式。可以指定格式(如 ‘f’、‘e’、‘g’)、精度和位大小。

  4. ParseBoolFormatBool:用于将字符串与布尔值之间进行转换。

    • ParseBoolfunc ParseBool(str string) (bool, error)。此函数将字符串形式的布尔值(如 “true” 或 “false”)转换为 bool 类型。如果字符串无法表示为布尔值,则会返回错误。

    • FormatBoolfunc FormatBool(b bool) string。此函数将 bool 类型的布尔值转换为字符串形式(“true” 或 “false”)。

三、Append系列

append 系列的主要作用是将其他类型的值,追加到字符串切片(如 []byte),最终生成新的字符串切片。

  1. AppendInt:用于将带符号整数转换为字符串并追加到一个字节切片中。

    dst := []byte("int64:")
    dst = strconv.AppendInt(dst, int64(123), 10)
    fmt.Println(string(dst))  // 输出 "int64:123"
    

    如果不采用这种方式,则需要先将 123 转为 string 类型,而后使用 append 添加到 dst 切片

    如果采用了这种方式,则一行解决

  2. AppendUint:用于将无符号整数转换为字符串并追加到一个字节切片中。

  3. AppendFloat:用于将浮点数转换为字符串并追加到一个字节切片中。

    dst := []byte("float64:")
    dst = strconv.AppendFloat(dst, 3.1415, 'f', 2, 64)
    fmt.Println(string(dst))  // 输出 "float64:3.14"
    
  4. AppendBool:用于将布尔值转换为字符串并追加到一个字节切片中。

    dst := []byte("bool:")
    dst = strconv.AppendBool(dst, true)
    fmt.Println(string(dst))  // 输出 "bool:true"
    
  5. AppendQuote:用于将带引号的字符串转换并追加到一个字节切片中。

    dst := []byte("quote:")
    dst = strconv.AppendQuote(dst, "example")
    fmt.Println(string(dst))  // 输出 "quote:\"example\""
    

通过这些 Append 系列的函数,可以在不产生额外的字符串分配的情况下,直接在字节切片上进行各种类型的转换和追加操作,这在性能敏感的应用中是非常有用的。

四、其他

QuoteUnquote:用于处理字符串引用和反引用。

  • Quote:func Quote(s string) string。此函数将输入字符串用双引号括起来,并转义其中的特殊字符(如换行符、制表符等),将普通字符串转换为带引号的 Go 语言字符串。
  • Unquote:func Unquote(s string) (string, error)。此函数将带引号的 Go 语言字符串转换为普通字符串,移除输入字符串的引号并解析其中的转义字符。
五、错误处理

返回值的第二个参数为 error

value, err := strconv.Atoi("abc")
if err != nil {
    fmt.Println("转换失败:", err)
}

当转换发生错误时:

  • 如果不接收错误,则 panic

  • 接收错误但不处理,程序表现可能不符合预期,因为此时 value 固定为空值,如 0

六、使用场景
  1. 配置文件解析:当从配置文件(如 JSON、YAML、INI 等)中读取值时,通常需要将字符串转换为特定类型。strconv 包提供了一种高效且类型安全的方式来完成这些转换。
  2. 网络协议解析:在处理如 HTTP、FTP 等网络协议时,经常需要将字符串和数字、布尔值等进行转换。strconv 包能够高效地完成这些任务。
  3. 数据库操作:当从数据库中读取或写入数据时,可能需要进行类型转换。例如,从数据库中读取一个整数字段,但数据库驱动返回了一个字符串。
  4. 日志记录:在生成日志时,经常需要将各种数据类型转换为字符串形式以便记录。strconv 包的 Format* 系列函数非常适用于这种场景。
  5. 用户输入验证:当需要从用户输入或外部源获取数据并转换为特定类型时,strconv 包的 Parse* 系列函数可以帮助验证和转换这些数据。
  6. 性能优化:在性能敏感的应用中,避免不必要的内存分配是很重要的。strconvAppend* 系列函数可以在一个已存在的字节切片上进行操作,避免了额外的内存分配。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

ThinkStu

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值