Go中的strconv

776 阅读3分钟

这是我参与8月更文挑战的第29天,活动详情查看:8月更文挑战

strconv

看到包名, 我们应该知道它是 string convert 的缩写形式.

strconv标准包, 提供了字符串和基本数据类型之间转换的一些函数, 以便于开发者使用.

ErrRange

该错误表明要转换的字符串超出了指定基本数据类型的表示范围

 var ErrRange = errors.New("value out of range")

ErrSyntax

该错误表明要转换的字符串不是指定的数据类型, 不能进转换

 var ErrSyntax = errors.New("invalid syntax")

Itoa

经常用于整型转字符串

 // itoa - 整型转字符串
 v4 := strconv.Itoa(12)
 fmt.Println("Itoa result: ", v4)

Atoi

经常用于字符串转整型

 // atoi - 字符串转换整型
 v4, err := strconv.Atoi("12")
 if err != nil {
    log.Fatalln("Atoi failed: ", err)
 }
 fmt.Printf("Atoi result: %T, %v \n", v4, v4)

Parse系列函数

Parse为前缀的系列函数, 是将字符串转换为指定的数值型数据, 支持型, 浮点型, 布尔型等

返回参数为该类型的最大的那一种类型, 比如: 返回的是int64, uint64, float64等类型

我们可以对返回的类型进行强制的类型转换为自己需要的类型

ParseInt

参数s: 将要转换的字符串

参数base: 可以是0, 代表通过解析字符串的前缀进行数值类型的转换, 前缀为0b表明这是二进制的字符串, 前缀为0或0o表明这是8进制的字符串, 前缀为0x表明这是十六进制的字符串, 其它前缀都表明是十进制的字符串, 可以直接指明多少进制, 取值范围为[2, 36]

参数bitSize: 取值可以为0, 8, 16, 32, 64分别代表int, int8, int16, int32和int64

 func ParseInt(s string, base int, bitSize int) (i int64, err error)

ParseBool

当传入的字符串为"1", "t", "T", "true", "TRUE", "True"时都代表布尔类型的true

当传入的字符串为"0", "f", "F", "false", "FALSE", "False"时都代表布尔类型的false

 func ParseBool(str string) (bool, error)

ParseFloat

参数bitSzie: 取值可以是32或者64, 指明将转换是浮点数类型为float32或者float64

 func ParseFloat(s string, bitSize int) (float64, error)
 // 字符串转整型
 v1, err := strconv.ParseInt("12", 10, 64)
 if err != nil {
    log.Fatalln("ParseInt failed: ", err)
 }
 fmt.Printf("ParseInt result: %T, %v \n", v1, v1)
 ​
 // 字符串转布尔型
 v2, err :=  strconv.ParseBool("true")
 if err != nil {
    log.Printf("ParseBool failed: ", err)
 }
 fmt.Printf("ParseBool result: %T, %v \n", v2, v2)
 ​
 // 字符串转浮点型
 v3, err :=  strconv.ParseFloat("3", 64)
 if err != nil {
    log.Fatalln("ParseFloat failed: ", err)
 }
 fmt.Printf("ParseFloat result: %T, %v \n", v3, v3)

Format系列函数

FormatInt

参数i: 为要转换成字符串的数值

参数base: 以多少进制将数值转换为字符串, 取值范围为[2, 36]

func FormatInt(i int64, base int) string

FormatBool

将布尔值转换为字符串只有两种结果

如果布尔值为true, 则字符串为"true"

如果布尔值为false, 则字符串值为"false"

func FormatBool(b bool) string {
   if b {
      return "true"
   }
   return "false"
}

FormatFloat

参数f: 浮点数值

参数fmt: 表明将浮点数是何种计数方式进行转换, 取值可以为: b, e, E, f, g, x, X

参数bitSize: 可以传入32或者64, 代表传入的浮点为float32类型或者float64类型

func FormatFloat(f float64, fmt byte, prec, bitSize int) string
// 整型转字符串
v1 := strconv.FormatInt(12, 10)
fmt.Println("FormatInt result: ", v1)

// 布尔型转字符串
v2 := strconv.FormatBool(false)
fmt.Println("FormatBool result: ", v2)

// 浮点型转字符串
v3 := strconv.FormatFloat(3.1234567, 'e', 6, 32)
fmt.Println("FormatFloat result: ", v3)

Append系列函数

将指定基本数据类型值, 拼接到一个字节切片上, 并返回一个新的切片

s := []byte("abc")

// 拼接整型
s = strconv.AppendInt(s, 12, 10)
fmt.Println("AppendInt result: ", string(s))

// 拼接布尔值
s = strconv.AppendBool(s, true)
fmt.Println("AppendBool result: ", string(s))

// 拼接浮点型
s = strconv.AppendFloat(s, 3.14, 'e', 6, 32)
fmt.Println("AppendFloat result: ", string(s))

Quote系列函数

将字符串以带引号的形式返回, 可以指明字符串的显示方式, 比如只是加上引号, 或者以编码形式返回

// 转换为带引号的字符串
fmt.Println(strconv.Quote("Hello, 世界"))

// 转换为带引号的编码字符串
fmt.Println(strconv.QuoteToASCII("Hello, 世界"))