字符串转换

Tuesday, August 29, 2023

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
Golang修炼

类型转换与类型断言

const+iota枚举最佳方式

comments powered by Disqus