golang改变type
更新时间:2023-10-221. 转换基本数据类型:
在 Go 中,类型转换可以用于比如将 int 转换为 float、将 float 转换为 int、将 int 转换为 string 等场景。格式如下:
// 将 int 转换为 float
var a int = 10
var b float64 = float64(a)
fmt.Println(b) //输出结果:10
// 将 float 转换为 int
var c float64 = 3.14
var d int = int(c)
fmt.Println(d) // 输出结果:3
// 将 int 转换为 string
var e int = 20
var f string = strconv.Itoa(e)
fmt.Printf("%T, %v", f, f) // 输出结果:string, 20
2. 转换切片类型:
在 Go 中,如果两个切片的元素类型相同,但切片类型不同,是不能直接赋值的,需要通过遍历元素一个个赋值,或者使用 copy 函数进行赋值。如下所示:
// 定义两个不同类型的切片
var slice1 []int = []int{1, 2, 3}
var slice2 []int32
// 通过遍历一个一个赋值
slice2 = make([]int32, len(slice1))
for i, v := range slice1 {
slice2[i] = int32(v)
}
fmt.Printf("%T, %v", slice2, slice2) // 输出结果:[]int32, [1 2 3]
// 使用 copy 函数进行赋值
slice2 = make([]int32, len(slice1))
copy(slice2, slice1)
fmt.Printf("%T, %v", slice2, slice2) // 输出结果:[]int32, [1 2 3]
3. 转换结构体类型:
在 Go 中,结构体类型转换只有在结构体类型的字段名、类型和顺序全部相同的情况下才可以进行,否则会编译错误。如下所示:
type Person struct {
Name string
Age int
}
type Student struct {
Name string
Age int
Score int
}
func main() {
var p1 Person = Person{"Tom", 18}
var s1 Student = Student(p1) // 编译错误:cannot convert p1 (type Person) to type Student
var p2 Person = Person{"Jerry", 20}
var s2 Student = Student{Name: p2.Name, Age: p2.Age, Score: 90}
fmt.Printf("%T, %v", s2, s2) // 输出结果:main.Student, {Jerry 20 90}
}
4. 自定义类型转换:
在 Go 中,可以使用 type 关键字定义自己的类型,可以为基本类型、结构体类型、接口类型等。可以通过类型转换实现不同类型之间的转换。如下所示:
// 定义自己的类型
type myInt int
// 自定义类型转换方法
func (m myInt) toFloat() float64 {
return float64(m)
}
func main() {
var a myInt = 10
var b float64 = a.toFloat()
fmt.Printf("%T, %v", b, b) // 输出结果:float64, 10
}