Go类型转换
Go要求显式类型转换,确保类型安全。
数值类型转换
整数转换
Go
var a int32 = 100
var b int64 = int64(a) // 显式转换
var c int = 100
var d int8 = int8(c) // 显式转换
// 注意:超出范围截断
var e int = 300
var f int8 = int8(e)
fmt.Println(f) // 44(截断)
浮点与整数转换
Go
var a float64 = 3.9
var b int = int(a) // 截断取整
fmt.Println(b) // 3
var c int = 10
var d float64 = float64(c)
fmt.Println(d) // 10.0
浮点转整数截断小数部分,非四舍五入。
不同精度浮点转换
Go
var a float32 = 3.14
var b float64 = float64(a) // 精度提升
var c float64 = 3.141592653
var d float32 = float32(c) // 精度丢失
fmt.Println(d) // 3.1415927
字符串转换
数值转字符串
Go
import "strconv"
// 整数转字符串
s := strconv.Itoa(42)
fmt.Println(s) // "42"
// 或使用FormatInt
s := strconv.FormatInt(42, 10) // 10进制
// 浮点转字符串
s := strconv.FormatFloat(3.14, 'f', 2, 64)
fmt.Println(s) // "3.14"
字符串转数值
Go
import "strconv"
// 字符串转整数
n, err := strconv.Atoi("42")
fmt.Println(n) // 42
// 字符串转整数(指定进制)
n, err := strconv.ParseInt("42", 10, 64)
// 字符串转浮点
f, err := strconv.ParseFloat("3.14", 64)
fmt.Println(f) // 3.14
字符与字符串
Go
// 字符转字符串
var c rune = 'A'
s := string(c)
fmt.Println(s) // "A"
// 字符串转字节切片
s := "Hello"
b := []byte(s)
// 字节切片转字符串
b := []byte{'H', 'i'}
s := string(b)
fmt.Println(s) // "Hi"
接口类型断言
类型断言
Go
var i interface{} = 42
// 断言类型
n, ok := i.(int)
if ok {
fmt.Println("是int:", n)
}
// 不安全断言(失败panic)
n := i.(int) // 成功返回值
s := i.(string) // panic!
类型switch
Go
var i interface{} = "hello"
switch v := i.(type) {
case int:
fmt.Println("int:", v)
case string:
fmt.Println("string:", v)
default:
fmt.Println("未知类型")
}
strconv函数汇总
| 函数 | 用途 |
|---|---|
| strconv.Itoa | int转string |
| strconv.Atoi | string转int |
| strconv.FormatInt | int64转string |
| strconv.ParseInt | string转int64 |
| strconv.FormatFloat | float转string |
| strconv.ParseFloat | string转float |
| strconv.FormatBool | bool转string |
| strconv.ParseBool | string转bool |
类型转换规则
| 转换类型 | 方式 | 说明 |
|---|---|---|
| 数值↔数值 | T(v) | 显式转换 |
| 字符↔字符串 | string(c) | rune转string |
| 字符串↔字节 | []byte(s) | 转换编码 |
| 字符串↔数值 | strconv | 包函数 |
| 接口↔具体 | 类型断言 | i.(T) |
要点总结
- Go无隐式转换,必须显式转换
- 语法:目标类型(值)
- 数值转换超出范围会截断
- 浮点转整数截断小数
- 字符串与数值转换用strconv
- 类型断言用于接口转具体类型
- 安全断言用ok返回值检查
📝 发现内容有误?点击此处直接编辑