Go 语言字符串使用方式与技巧( 二 )


第二个参数指定进制,它的值如果是 0,进制则以第一个参数符号后的前缀决定,例如:"0b" 为 2,"0" 或 "0o" 为 8 , "0x" 为 16,否则为 10;
第三个参数指定返回结果必须符合整数类型的取值范围,它的值为 0、8、16、32 和 64,分别代表 intint8int16int32 和 int64
细心的读者朋友们可能已经发现 , 示例代码中 , 第 2 和 第 4 返回错误,原因是第二个参数指定的进制与第一个参数的数值不相符,超出取值范围 。
此外,函数 func ParseUint(s string, base int, bitSize int) (uint64, error) 与之类似,但是用于无符号整数 。
在实际项目开发中,十进制使用的最多,所以标准库 strconv 提供了函数 func Atoi(s string) (int, error),它的功能类似 ParseInt(s, 10, 0),需要注意的是,它的返回值类型是 int(需要注意取值范围),而不是 int64
布尔 to 字符串
示例代码:
func main() { v := true s := strconv.FormatBool(v) fmt.Printf("%T, %vn", s, s)}输出结果:
string, true阅读上面这段代码 , 我们使用 func FormatBool(b bool) string 将布尔转换为字符串 。
浮点型 to 字符串
示例代码:
func main() { v := 3.1415926535 s32 := strconv.FormatFloat(v, 'E', -1, 32) fmt.Printf("%T, %vn", s32, s32) s64 := strconv.FormatFloat(v, 'E', -1, 64) fmt.Printf("%T, %vn", s64, s64) fmt64 := strconv.FormatFloat(v, 'g', -1, 64) fmt.Printf("%T, %vn", fmt64, fmt64)}输出结果:
string, 3.1415927E+00string, 3.1415926535E+00string, 3.1415926535阅读上面这段代码,我们使用 func FormatFloat(f float64, fmt byte, prec, bitSize int) string 将浮点型转换为字符串 。该函数包含 4 个参数,第一个参数是需要转换的浮点数;第二个参数是进制;第三个参数是精度,第四个参数是转换后值的取值范围 。
其中,第二个参数 b 代表二进制指数;e 或 E 代表十进制指数;f 代表无进制指数;g 或 G 代表指数大时 为 e,反之为 fx 或 X 代表十六进制分数和二进制指数 。
第三个参数,精度 prec 控制由 'e','E','f','g','G','x' 和 'X' 格式打印的位数(不包括指数) 。对于 'e','E','f','x' 和 'X',它是小数点后的位数 。对于 'g' 和 'G' , 它是有效数字的最大数目(去掉后面的零) 。特殊精度 -1 使用所需的最小位数,以便 ParseFloat 精确返回 f
整型 to 字符串
示例代码:
func main() { v := int64(-42) s10 := strconv.FormatInt(v, 10) fmt.Printf("%T, %vn", s10, s10) s16 := strconv.FormatInt(v, 16) fmt.Printf("%T, %vn", s16, s16)}输出结果:
string, -42string, -2a阅读上面这段代码,我们使用 func FormatInt(i int64, base int) string 将整型转换为字符串 。需要注意的是,第二个参数的取值范围 2 <= base <= 36
此外,函数 func FormatUint(i uint64, base int) string 与之功能类型,区别是仅用于转换无类型整数 。
在实际项目开发中,十进制使用的最多,所以标准库 strconv 提供了函数 func Itoa(i int) string,它的功能类似 FormatInt(int64(i), 10),需要注意的是,该函数入参的类型是 int
03 
字符串操作
关于字符串操作 , 标准库 strings 提供了相关函数,我们介绍几个常用的函数 。
字符串中是否包含指定字符串
示例代码:
func main() { fmt.Println(strings.Contains("seafood", "foo")) fmt.Println(strings.Contains("seafood", "bar")) fmt.Println(strings.Contains("seafood", "")) fmt.Println(strings.Contains("", ""))}


推荐阅读