龙空技术网

第9章 面向对象—结构体

波波源源by 23

前言:

当前你们对“结构体对象的定义及引用”大体比较讲究,姐妹们都想要剖析一些“结构体对象的定义及引用”的相关资讯。那么小编在网摘上汇集了一些有关“结构体对象的定义及引用””的相关内容,希望看官们能喜欢,兄弟们快快来学习一下吧!

面向对象的引入

【1】Golang语言面向对象编程说明:

(1)Golang也支持面向对象编程(OOP),但是和传统的面向对象编程有区别,并不是纯粹的面向对象语言。所以我们说Golang支持面向对象编程特性是比较准确的。

(2)Golang没有类(class),Go语言的结构体(struct)和其它编程语言的类(class)有同等的地位,你可以理解Gelang是基于struct来实现OOP特性的。

(3)Golang面向对象编程非常简洁,去掉了传统OOP语言的方法重载、构造函数和析构函数、隐藏的this指针等等

(4)Golang仍然有面向对象编程的继承,封装和多态的特性,只是实现的方式和其它OOP语言不一样,比如继承:Golang没有extends 关键字,继承是通过匿名字段来实现。

【2】结构体的引入:

具体的对象:

一位老师:珊珊老师: 姓名:赵珊珊 年龄:31岁 性别 :女 ......

可以使用变量来处理:

package mainimport "fmt"func main(){	var name string = "赵珊珊"	var age int = 31	var sex string = "女"	fmt.Printf("name: %v,age: %v,sex: %v \n",name,age,sex)	var name1 string = "马士兵"	var age1 int = 45	var sex1 string = "男"	fmt.Printf("name1: %v,age1: %v,sex1: %v \n",name1,age1,sex1)}

缺点:

(1)不利于数据的管理、维护

(2)老师的很多属性属于一个对象,用变量管理太分散了

结构体

【1】结构体、结构体对象的引入:

案例:老师结构体

后续实践中按照自己的需求定义结构体即可

【2】代码:

package mainimport "fmt"//定义老师结构体,将老师中的各个属性  统一放入结构体中管理:type Teacher struct{	Name string	Age int	School string}func main()  {	//创建老师结构体的实例、对象、变量:	var t1 Teacher	fmt.Println(t1)	t1.Name = "马士兵"	t1.Age = 45	t1.School = "北京清华大学"	fmt.Println(t1)	fmt.Println(t1.Age + 10)}
内存分析

结构体实例创建方式

【1】方式1:直接创建:

【2】方式2:

    // 方式2	var t2 Teacher = Teacher{"赵珊珊",31,"黑龙江大学"}	fmt.Println(t2)

【3】方式3:返回的是结构体指针:

    // 方式3	var t3 *Teacher = new(Teacher)	// t是指针,t其实指向的就是地址,应该给这个地址的指向的对象的字段赋值	(*t3).Name = "菜园子"	// *的作用:根据地址取值	(*t3).Age = 31	// 为了符合程序员的编程习惯,go提供了简化的赋值方式:	t3.School ="德州学院" //go编译器底层对t.School转化 (*t).School = "德州学院"	fmt.Println(*t3)

【4】方式4:返回的是结构体指针:

    // 方式4	var t4 *Teacher = &Teacher{"高启强",45,"社会大学"}	fmt.Println(*t4)
结构体之间的转换

【1】结构体是用户单独定义的类型,和其它类型进行转换时需要有完全相同的字段(名字、个数和类型)

package mainimport "fmt"type Student struct {	Age int}type Person struct {	Age int}func main()  {	var s Student = Student{10}	var p Person = Person{20}	fmt.Println(s)	fmt.Println(p)	s = Student(p)	fmt.Println(s)	fmt.Println(p)}

【2】结构体进行type重新定义(相当于取别名),Golang认为是新的数据类型,但是相互间可以强转

package mainimport "fmt"type Student struct {	Age int}type Stu Studentfunc main()  {	var s1 Student = Student{10}	var s2 Stu = Stu{20}	fmt.Println(s1)	fmt.Println(s2)	s1 = Student(s2)	fmt.Println(s1)	fmt.Println(s2)}

参考源码:「链接」

参考个人博客:cyz

标签: #结构体对象的定义及引用 #结构体对象的定义及引用方式