1. 接口隐式转换
在 Go 语言中,接口隐式转换是指当一个具体类型(如结构体)实现了某个接口(或父类)的所有方法时,该类型的实例(值或指针)可以直接赋值给接口类型的变量,无需显式类型转换。
type Fruit interface {
GetName() string
}
type Banana struct {
Name string
}
func (b Banana) GetName() string { // 实现接口方法
return b.Name
}
var fruit Fruit // 接收值类型或指针类型都合法
// 值类型隐式转换
banana1 := Banana{Name: "red"}
fruit = banana1 // ✅ 合法
// 指针类型隐式转换
banana := &Banana{Name: "yellow"}
fruit = banana // ✅ 合法
2. strconv包
strconv包提供了字符串与基本数据类型之间的转换功能。
应该在转换后检查错误,避免因非法输入导致程序崩溃。
// string转十进制
num, err := strconv.Atoi("123")
// string转自定义进制(16进制)
num, err := strconv.ParseInt("1a", 16)
num, err := strconv.ParseFloat("3.14", 64) // 第二个参数指明精度(32/64位)
b, err := strconv.ParseBool("TRUE") // 输出 true
s := strconv.Itoa(42) // 十进制转string
s = strconv.FormatInt(42, 16) // 十六进制(0x开头)
s = strconv.FormatInt(42, 2) // 二进制
s := strconv.FormatFloat(3.14159, 'f', 2, 64) // 格式化为 "3.14"
s = strconv.FormatFloat(math.Pi, 'e', 3, 64) // 科学计数法 "3.142e+00"