c语言编程笔录

首页 >   > 笔记大全

笔记大全

golang改变type

更新时间:2023-10-22

1. 转换基本数据类型:

在 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
}