Golang的标准库strconv提供了丰富的字符串和基本数据类型之间的转换功能,是处理类型转换场景的常用工具,覆盖了整数、浮点数、布尔值等多种类型的转换需求。

strconv包核心转换方法
字符串转整数
最常用的字符串转整数方法是Atoi,它可以将十进制字符串转换为int类型,内部实际调用的是ParseInt方法,默认使用十进制、位大小为0(对应int类型的位大小)。
如果需要更灵活的转换,比如指定进制或者位大小,可以使用ParseInt方法,该方法支持2到36进制的字符串转换,返回int64类型的结果。
package main
import (
"fmt"
"strconv"
)
func main() {
// 使用Atoi转换十进制字符串
str1 := "123"
num1, err := strconv.Atoi(str1)
if err != nil {
fmt.Println("转换失败:", err)
} else {
fmt.Printf("转换结果: %d, 类型: %Tn", num1, num1)
}
// 使用ParseInt转换十六进制字符串
str2 := "1a"
num2, err := strconv.ParseInt(str2, 16, 64)
if err != nil {
fmt.Println("转换失败:", err)
} else {
fmt.Printf("转换结果: %d, 类型: %Tn", num2, num2)
}
}
整数转字符串
整数转字符串可以使用Itoa方法,它将int类型转换为十进制字符串,同样内部调用的是FormatInt方法。如果需要指定进制转换,可以使用FormatInt方法,支持将int64类型转换为指定进制的字符串。
package main
import (
"fmt"
"strconv"
)
func main() {
// 使用Itoa转换整数
num1 := 456
str1 := strconv.Itoa(num1)
fmt.Printf("转换结果: %s, 类型: %Tn", str1, str1)
// 使用FormatInt转换指定进制的整数
num2 := int64(255)
str2 := strconv.FormatInt(num2, 16)
fmt.Printf("十六进制转换结果: %sn", str2)
}
字符串转布尔值
strconv包提供了ParseBool方法用于字符串转布尔值,支持的字符串包括"1"、"t"、"T"、"TRUE"、"true"、"True"对应true,"0"、"f"、"F"、"FALSE"、"false"、"False"对应false,其他字符串会返回错误。
package main
import (
"fmt"
"strconv"
)
func main() {
testStrs := []string{"true", "false", "1", "0", "t"}
for _, s := range testStrs {
b, err := strconv.ParseBool(s)
if err != nil {
fmt.Printf("字符串 %s 转换失败: %vn", s, err)
} else {
fmt.Printf("字符串 %s 转换结果: %vn", s, b)
}
}
}
字符串转浮点数
字符串转浮点数可以使用ParseFloat方法,它支持将字符串转换为float64类型,第二个参数指定位大小,32对应float32,64对应float64,返回时会转换为对应的float64类型,如果需要float32可以再做类型转换。
package main
import (
"fmt"
"strconv"
)
func main() {
str := "3.1415"
f, err := strconv.ParseFloat(str, 64)
if err != nil {
fmt.Println("转换失败:", err)
} else {
fmt.Printf("转换结果: %f, 类型: %Tn", f, f)
// 如果需要float32类型
f32 := float32(f)
fmt.Printf("转换为float32: %f, 类型: %Tn", f32, f32)
}
}
转换注意事项
- 所有转换方法都可能返回错误,实际开发中一定要处理错误,避免无效字符串导致程序崩溃。
ParseInt和FormatInt的位大小参数,0表示对应int或uint类型的默认位大小,32对应32位,64对应64位。- 字符串转数值类型时,字符串不能包含非数值相关的字符,比如"123a"使用
Atoi转换会返回错误。 - 布尔值转换仅支持特定的字符串格式,自定义格式需要先做字符串处理再转换。
常见问题解答
为什么Atoi转换大数字会失败
因为Atoi返回的是int类型,不同平台int的位大小不同,32位平台int最大是2147483647,超过这个值的字符串转换会溢出返回错误,这种场景可以使用ParseInt指定64位大小来转换。
浮点数转字符串如何控制精度
可以使用FormatFloat方法,它支持指定格式和精度,比如strconv.FormatFloat(3.1415, 'f', 2, 64)会保留两位小数,返回"3.14"。
package main
import (
"fmt"
"strconv"
)
func main() {
f := 3.1415926
// 'f'表示十进制格式,2表示保留两位小数,64表示float64类型
str := strconv.FormatFloat(f, 'f', 2, 64)
fmt.Println("格式化后字符串:", str)
}
Golangstrconv类型转换string_to_intint_to_string修改时间:2026-07-11 15:09:36