文章目录
- 零、转换速查
- 一、基本类型转换规则
- 1. 数值类型转换
- (1)同类转换(精度可能丢失)
- (2)跨类转换(需借助标准库)
- 2. 自定义类型转换
- 二、`strconv` 包:字符串与类型转换
- 1. 字符串转数值
- 2. 数值转字符串
- (1)转字符串:`Itoa` / `FormatInt`
- (2)转浮点数为字符串:`FormatFloat`
零、转换速查
转换方向 | 方法/函数 | 示例 |
---|---|---|
数值→字符串 | strconv.Itoa / FormatInt | str := strconv.Itoa(123) |
字符串→数值 | strconv.Atoi / ParseInt | num, _ := strconv.Atoi("456") |
浮点→字符串 | strconv.FormatFloat | str := strconv.FormatFloat(3.14, 'f', 2, 64) |
字符串→浮点 | strconv.ParseFloat | f, _ := strconv.ParseFloat("3.14", 64) |
自定义类型→基础类型 | 显式转换(目标类型(源变量) ) | type MyInt int; i := int(MyInt(10)) |
进制转换 | ParseInt /FormatInt 指定base | binStr := strconv.FormatInt(10, 2) (十进制10→二进制"1010") |
一、基本类型转换规则
Go语言是强类型语言,不同类型变量之间赋值需显式转换,格式为:
目标类型(源类型变量)
var a float64 = 3.14
var b int = int(a) // 显式转换:float64 → int
1. 数值类型转换
(1)同类转换(精度可能丢失)
- 整型 ↔ 浮点型:
- 浮点型转整型:直接截断小数部分(不四舍五入)。
var f float64 = 5.9 var i int = int(f) // i = 5
- 有符号整型 ↔ 无符号整型:按二进制位直接转换(可能出现负数变正数)。
var x int8 = -1 // 二进制:11111111(补码) var y uint8 = uint8(x) // y = 255(无符号解释)
- 浮点型转整型:直接截断小数部分(不四舍五入)。
(2)跨类转换(需借助标准库)
- 字符串 ↔ 数值:使用
strconv
包(见下文详细说明)。str := "123" num, err := strconv.Atoi(str) // string → int
2. 自定义类型转换
通过 type
关键字定义的自定义类型,与原类型视为不同类型,需显式转换。
// 定义自定义类型 Age,底层为 int
type Age int
var age Age = 25
var num int = int(age) // 自定义类型 → 基础类型
var newAge Age = Age(num) // 基础类型 → 自定义类型
二、strconv
包:字符串与类型转换
strconv
包提供字符串与基本类型(bool
、int
、float
等)的相互转换功能,支持进制转换和精度控制。
1. 字符串转数值
(1)转整数:Atoi
/ ParseInt
Atoi(s string) (int, error)
:将字符串转为int
(默认十进制)。num, err := strconv.Atoi("123") // num=123, err=nil
ParseInt(s string, base int, bitSize int) (int64, error)
:base
:进制(2-36,0 表示自动判断前缀)。bitSize
:结果类型(0→int
/uint
,8→int8
,16→int16
等)。
// 二进制字符串转 int16 i, err := strconv.ParseInt("1010", 2, 16) // i=10, err=nil
(2)转无符号整数:ParseUint
u, err := strconv.ParseUint("255", 10, 8) // uint8类型,值255
(3)转浮点数:ParseFloat
f, err := strconv.ParseFloat("3.14", 64) // float64类型,值3.14
(4)转布尔值:ParseBool
b, err := strconv.ParseBool("true") // b=true, err=nil
2. 数值转字符串
(1)转字符串:Itoa
/ FormatInt
Itoa(i int) string
:将int
转为十进制字符串。str := strconv.Itoa(123) // str="123"
FormatInt(i int64, base int) string
:按指定进制转字符串。binStr := strconv.FormatInt(10, 2) // 二进制:"1010" hexStr := strconv.FormatInt(255, 16) // 十六进制:"ff"
(2)转浮点数为字符串:FormatFloat
// 格式说明:'f'表示固定小数位,prec=2表示保留2位小数
str := strconv.FormatFloat(3.1415, 'f', 2, 64) // "3.14"