Golang标准库学习 - strconv
hanpy

strconv主要用于字符串和基本数据类型之间转换,练习一下常用到的方法来加深记忆。

字符串和整型之间的转换

字符串转为整型

1
2
3
func ParseInt(s string, base int, bitSize int) (i int64, err error)
func ParseUint(s string, base int, bitSize int) (n uint64, err error)
func Atoi(s string) (i int, err error)

参数 base 代表字符串按照给定的进制进行解释。一般的,base 的取值为 2~36,如果 base 的值为 0,则会根据字符串的前缀来确定 base 的值:”0x” 表示 16 进制; “0” 表示 8 进制;否则就是 10 进制。

参数 bitSize 表示的是整数取值范围,或者说整数的具体类型。取值 0、8、16、32 和 64 分别代表 int、int8、int16、int32 和 int64。

AtoiParseInt 的便捷版,内部通过调用 ParseInt(s, 10, 0) 来实现的

主要来看一下ParseInt的使用

1
2
3
4
5
6
7
8
9
10
11
// 把字符串s转换为int8类型的整数
s := "20"
// base代表字符串按照给定的进制进行解释,base的取值为 2~36
// bitSize表示的是整数取值范围,或者说整数的具体类型。
// 取值 0、8、16、32 和 64 分别代表 int、int8、int16、int32 和 int64
parseInt64, err := strconv.ParseInt(s, 10, 8)
if err != nil {
fmt.Println(err)
}
pInt8 := int8(parseInt64)
fmt.Println(pInt8)

函数返回的是int64的类型,这是为了能够容纳所有的整型,在实际使用中,可以根据传递的 bitSize,然后将结果转为实际需要的类型。

只要是传入的base和bitSize是匹配的并且err为nil,转换为bitSize的类型就是没有问题的。如果字符串表示的整数超过了 bitSize 参数能够表示的范围,则会返回 ErrRange,同时会返回 bitSize 能够表示的最大或最小值。

1
2
3
4
5
6
7
8
9
10
// 把字符串s转换为int8类型的整数(int8最大可表示整数为127)
s := "128"
parseInt64, err := strconv.ParseInt(s, 10, 8)
fmt.Println(parseInt64)
if err != nil {
fmt.Println(err)
return
}
// 127
// strconv.ParseInt: parsing "128": value out of range

整型转为字符串

1
2
3
func FormatUint(i uint64, base int) string    // 无符号整型转字符串
func FormatInt(i int64, base int) string // 有符号整型转字符串
func Itoa(i int) string
1
2
3
i := 1289
str := strconv.FormatInt(int64(i), 10)
fmt.Println(str)

还有另外的方法

1
fmt.Sprintf("%d", 127)

Sprintf性能要差一些,因为它接收的是 interface,需要进行反射等操作,所以建议使用 strconv 包中的方法进行转换。

字符串和布尔值之间的转换

1
2
3
4
5
6
7
8
// 接受 1, t, T, TRUE, true, True, 0, f, F, FALSE, false, False 等字符串;
// 其他形式的字符串会返回错误
func ParseBool(str string) (value bool, err error)
// 直接返回 "true" 或 "false"
func FormatBool(b bool) string
// 将 "true" 或 "false" append 到 dst 中
// 这里用了一个 append 函数对于字符串的特殊形式:append(dst, "true"...)
func AppendBool(dst []byte, b bool)