开发者学堂课程【Go 语言核心编程 - 面向对象、文件、单元测试、反射、TCP 编程:结构体使用细节(2)】学习笔记,与课程紧密联系,让用户快速学习知识。
课程地址:https://developer.aliyun.com/learning/course/626/detail/9674
结构体使用细节(2)
内容介绍:
一、结构体使用细节2
二、结构体使用细节3
一、结构体使用细节2
结构体是用户单独定义的类型,和其它类型进行转换时需要有完全相同的字段(包括名字、个数和类型)
举例说明
最后一行代码:b = B(a)正确吗?
type A struct {
Num int
}
type B struct {
Num int
func main(){
var a A
var b B
b = B(a)
创建验证
新建一个文件夹structdetails2,创建main.go文件,输入以下代码:
package main
import "fmt"
type A struct {
Num int}
type B struct {
Num int}
func main(){
var a A
var b B
fmt.Println(a,b)
}
l 输出结果为0、0
l 结论:若对 b 进行强转,a=A(b),也可以完成,输出结果也为0、0,若要完成转换,则需要结构体的的字段完全一样(包括名字、个数和类型)。
二、结构体使用细节2
结构体进行type重新定义(相当于取别名),Golang认为是新的数据类型,但是相互间可以强转
l 举例说明1
type student struct{
Name string
Age int
}
type Stu student
func main(){
var Stu1 Student
var stu2 Stu
Stu2=Stu1//正确吗?
fmt.Println(stut1,stu2)
}
结论:利用type对结构体进行重新定义,比如定义为student的结构体,type定义为Stu,Stu和student其实是同一种结构体。而定义了Stu1和Stu2的时候,不可以将Stu1直接赋值给Stu2,这是因为Golang认为是经type重新定义后Stu转变成新的数据类型,即Golang认为Stu和students是两个不相同的数据类型。因此直接把Stu1交给Stu2是错的,可以将 Stu2 进行强转,修改成stu2 =Stu(stu1),此时相当于两个结构体有了相同的字段。
l 举例说明2
type integer int
func main(){
var i integer = 10
var j int = 20
j =i//正确吗?不可以!修改: j=int(i)
fmt.println(i,j)
}
int是由golang设计好的数据类型,用type将int重新定义为integer,即integer相当于int。此时若把10赋给integer i,把20赋给int j,不能将i赋值给j。原因与例1一样,经type重新定义后,integer和int是两个不同的数据类型,因此不可以把i直接赋给j,修改成j=int(i)经过强转后,i可以赋给j。