GoLang strconv库常用方法详解
Go语言的`strconv`包实现了基本数据类型和其字符串表示的相互转换。本文将详细介绍最常用的`Atoi`/`Itoa`互转、`Parse`系列解析函数以及`Format`系列格式化函数,帮助开发者快速掌握数值类型的字符串处理。
基础操作:string与int转换
`strconv`包提供了便捷的函数来处理最常见的整型与字符串互转需求。
第1步:字符串转整数 Atoi()
Atoi()函数用于将字符串类型的整数转换为int类型。其内部等价于调用ParseInt(s, 10, 0),即默认按十进制解析。
函数签名:
func Atoi(s string) (i int, err error)
示例代码:
v := "10"
if s, err := strconv.Atoi(v); err == nil {
fmt.Printf("%T, %v", s, s)
}
// Output:
// int, 10
第2步:整数转字符串 Itoa()
Itoa()函数用于将int类型数据转换为对应的字符串表示。其内部等价于调用FormatInt(int64(i), 10),即默认为十进制输出。
函数签名:
func Itoa(i int) string
示例代码:
i := 10
s := strconv.Itoa(i)
fmt.Printf("%T, %v\n", s, s)
// Output:
// string, 10
解析系列:字符串转为指定类型值
Parse类函数用于将字符串转换为特定类型的布尔值、浮点数或整数。这些函数提供更高的灵活性,可以指定进制和位宽。
第1步:解析布尔值 ParseBool()
函数签名:
func ParseBool(str string) (value bool, err error)
说明:返回字符串表示的布尔值。接受的合法输入包括:1, t, T, TRUE, true, True(返回true);0, f, F, FALSE, false, False(返回false)。其他任何值都会返回错误。
示例代码:
v := "true"
if s, err := strconv.ParseBool(v); err == nil {
fmt.Printf("%T, %v\n", s, s)
}
// Output:
// bool, true
第2步:解析带符号整数 ParseInt()
函数签名:
func ParseInt(s string, base int, bitSize int) (i int64, err error)
参数说明:
- s: 待解析的字符串,可包含前导符号"+"或"-"。
- base: 基数(0、2到36)。若为0,则由前缀决定:"0b"为二进制,"0"或"0o"为八进制,"0x"为十六进制,否则为十进制。支持Go语法中的下划线分隔符。
- bitSize: 结果必须适合的整数类型,可选0、8、16、32和64,分别对应int/int8/int16/int32/int64。
错误处理:若格式无效返回*NumError (ErrSyntax);若数值超出范围返回ErrRange,并返回该位大小下的最大值。
示例代码:
v32 := "-354634382"
if s, err := strconv.ParseInt(v32, 10, 32); err == nil {
fmt.Printf("%T, %v\n", s, s)
}
if s, err := strconv.ParseInt(v32, 16, 32); err == nil {
fmt.Printf("%T, %v\n", s, s)
}
v64 := "-3546343826724305832"
if s, err := strconv.ParseInt(v64, 10, 64); err == nil {
fmt.Printf("%T, %v\n", s, s)
}
if s, err := strconv.ParseInt(v64, 16, 64); err == nil {
fmt.Printf("%T, %v\n", s, s)
}
// Output:
// int64, -354634382
// int64, -3546343826724305832
第3步:解析无符号整数 ParseUint()
函数签名:
func ParseUint(s string, base int, bitSize int) (n uint64, err error)
说明:类似ParseInt,但专门用于无符号数,不支持前导符号。
示例代码:
v := "42"
if s, err := strconv.ParseUint(v, 10, 32); err == nil {
fmt.Printf("%T, %v\n", s, s)
}
if s, err := strconv.ParseUint(v, 10, 64); err == nil {
fmt.Printf("%T, %v\n", s, s)
}
// Output:
// uint64, 42
// uint64, 42
第4步:解析浮点数 ParseFloat()
函数签名:
func ParseFloat(s string, bitSize int) (f float64, err error)
参数说明:bitSize指定目标精度(32或64)。虽然返回类型始终是float64,但当bitSize为32时,转换回float32不会丢失精度。
特性:
- 接受十进制和十六进制浮点语法。
- 采用IEEE754无偏舍入,若字符串接近有效浮点数则返回最接近的值。
- 识别特殊值:
NaN,Inf/Infinity(忽略大小写)。
示例代码:
v := "3.1415926535"
if s, err := strconv.ParseFloat(v, 32); err == nil {
fmt.Printf("%T, %v\n", s, s)
}
if s, err := strconv.ParseFloat(v, 64); err == nil {
fmt.Printf("%T, %v\n", s, s)
}
if s, err := strconv.ParseFloat("NaN", 32); err == nil {
fmt.Printf("%T, %v\n", s, s)
}
// ParseFloat is case insensitive
if s, err := strconv.ParseFloat("nan", 32); err == nil {
fmt.Printf("%T, %v\n", s, s)
}
if s, err := strconv.ParseFloat("inf", 32); err == nil {
fmt.Printf("%T, %v\n", s, s)
}
if s, err := strconv.ParseFloat("+Inf", 32); err == nil {
fmt.Printf("%T, %v\n", s, s)
}
if s, err := strconv.ParseFloat("-Inf", 32); err == nil {
fmt.Printf("%T, %v\n", s, s)
}
if s, err := strconv.ParseFloat("-0", 32); err == nil {
fmt.Printf("%T, %v\n", s, s)
}
if s, err := strconv.ParseFloat("+0", 32); err == nil {
fmt.Printf("%T, %v\n", s, s)
}
// Output:
// float64, 3.1415927410125732
// float64, 3.1415926535
// float64, NaN
// float64, NaN
// float64, +Inf
// float64, +Inf
// float64, -Inf
// float64, -0
// float64, 0
格式化系列:将数值转为字符串
Format系列函数用于将给定类型的数值格式化为字符串,广泛应用于日志打印和数据传输场景。
第1步:格式化布尔值 FormatBool()
函数签名:
func FormatBool(b bool) string
说明:根据值返回"true"或"false"。
示例代码:
v := true
s := strconv.FormatBool(v)
fmt.Printf("%T, %v\n", s, s)
// Output:
// string, true
第2步:格式化整数 FormatInt() & FormatUint()
函数签名:
func FormatInt(i int64, base int) string
func FormatUint(i uint64, base int) string
说明:返回给定基数的字符串表示(2 <= base <= 36)。对于 >=10 的数字值,使用小写字母 'a'-'z' 代表10-35。
示例代码:
v := int64(-42)
s10 := strconv.FormatInt(v, 10)
fmt.Printf("%T, %v\n", s10, s10)
s16 := strconv.FormatInt(v, 16)
fmt.Printf("%T, %v\n", s16, s16)
u := uint64(42)
sU10 := strconv.FormatUint(u, 10)
sU16 := strconv.FormatUint(u, 16)
// Output:
// string, -42
// string, -2a
// string, 42
// string, 2a
第3步:格式化浮点数 FormatFloat()
函数签名:
func FormatFloat(f float64, fmt byte, prec, bitSize int) string
参数说明:
- fmt: 格式字符。可选'b'(二进制指数)、'e'/'E'(十进制指数)、'f'(无指数)、'g'/'G'(自动选择e/f)、'x'/'X'(十六进制分数)。
- prec: 精度。控制小数位数或有效数字位数。特殊值-1使用最少位数以确保ParseFloat能准确还原。
- bitSize: 原始值的位宽(32或64),用于对结果进行适当的舍入。
示例代码:
v := 3.1415926535
s32 := strconv.FormatFloat(v, 'E', -1, 32)
fmt.Printf("%T, %v\n", s32, s32)
s64 := strconv.FormatFloat(v, 'E', -1, 64)
fmt.Printf("%T, %v\n", s64, s64)
// Output:
// string, 3.1415927E+00
// string, 3.1415926535E+00
其他辅助函数
除了上述核心转换和格式化函数外,strconv包还提供了一些辅助工具函数:
检查可打印字符 IsPrint()
函数签名:
func IsPrint(r rune) bool
说明:判断字符是否为可打印字符(广义字母、数字、标点、符号、ASCII空格),行为与unicode.IsPrint一致。
检查反引号可用性 CanBackquote()
函数签名:
func CanBackquote(s string) bool
说明:判断字符串是否可以被安全地表示为一个单行的反引号字符串(即不包含除空格和Tab之外的控制字符)。
此外,strconv包还包含Append系列和Quote系列函数,适用于更复杂的字符串拼接和引用需求。详细用法建议查阅官方文档。
以上就是GoLang中Strconv库常用方法的详细内容,更多关于Go Strconv库使用技巧的资料请关注本站其它相关文章!
本站声明
本文内容仅供参考,不代表本站观点。转载或引用请注明出处。如发现内容问题,请通过联系我们页面反馈。













