struct的作用:
struct 其实就是用来自定义复杂的数据结构,来表示基本数据类型不能表示的数据类型。比如一个学生的各种属性(年龄、性别,姓名等)
struct的定义 :
type 标识符 struct{
filed1 type //filed1是字段,type标识字段的类型,可以多个字段,字段名不可重复
filed2 type
... ...
}
例:
type student struct{ name string age int score int }
通过上述定义,就自定义了一个名为student的数据类型,如何 使用呢?其实就相当于使用基本数据类型。
func teststruct(){ var stu1 student //定义一个名为stu1 类型为student的变量 stu1.age = 100 //访问student数据类型中的字段的方法是stu1.age,这行就是给变量赋值 stu1.name = "wang" stu1.score = 120 fmt.Printf("%#v ",stu1) //打印输出结果 } //输出结果是: //main.student{name:"wang", age:100, score:120}
上面定义了一个普通变量,下面我来看怎么定义一个指针变量以及指针变量的使用。func teststructpoint(){
var stu *student //定义指针变量 stu = new(student) //给指针变量赋值,指针变量的值必须是地址。new(type)就是给stu分配类型为student的内存地址。或者这样定义也可以,先定义一个普通变量,把普通变量的地址赋值给stu.例:var stu1 student stu = &stu1 (*stu).name = "lilili" stu.age = 100 //stu.age 相当于 (*stu).age,这个是go的语法糖 stu.score = 200 fmt.Printf("%#v ",stu)
}
//输出结果
//&main.student{name:"lilili", age:100, score:200}
上面我们知道了struct的作用及定义方法,以及自定义类型以后的使用。那我们来总结一下,使用student类型时如何定义
- var stu Student //定义变量
- var stu *Student = new (Student) //定义指针变量并初始化
- var stu *Student = &Student{} //定义指针变量并初始化
访问方式如下:
stu.age 或者
(*stu).age