Golang 结构体
★Golang 语言面向对象编程说明
1)Golang也支持面向对象编程(oop),但是和传统的面向对象编程有区别,并不是纯粹的面向对象语言。所以我们说Golang支持面向对象编程特性是比较准确的。
2)Golang没有类(Class),Go语言的结构体(struct)和其他编程语言的类有同等的地位,你可以理解Golang是基于struct来实现OOP特性的。
3)Golang面向对象编程非常简洁,去掉了传统OOP语言的继承、方法重载、构造函数和析构函数、隐藏的this指针等等。
4)Golang仍然有面向对象编程的继承,封装和多态的特性,只是实现的方式和其他OOP语言不一样,比如继承:Golang没有extends 关键字,继承是通过匿名字段来实现。
5)Golang面向对象很优雅,OOP本身就是语言类型系统的一部分,通过接口关联,耦合性低,也非常灵活。也就是说在Golang中面向接口编程时非常重要的特性。
★结构体和机构体变量的区别和联系
1)结构体时自定义的数据类型,代表一类事物。
2)结构体变量(实例)是具体的,实际的,代表一个具体变量。
★如何声明结构体
type 标识符 struct {
field1 type
field2 type
}
type Student struct{ Name string Age int Score float32 }
★字段/属性
注意事项和细节说明
1)字段声明语法同变量,举例:字段名 字段类型
2)字段的类型可以为:基本类型、数组或引用类型
3)在创建一个结构体变量后,如果没有给字段赋值,都对应一个零值(默认值)
布尔类型是false,整型是0,字符串是“”。
数组类型的默认值和它的元素类型相关,比如 score [3]int 则为[0,0 ,0]
指针,slice,和map的零值都是nil,即还没有分配空间。
4)不同结构体变量的字段是独立,互不影响,一个结构体变量字段的更改,不影响另外一个
★创建结构体变量和访问结构体字段
1)方式1 直接声明
var person Person
2)方式2 {}
var persion Persion = Person{}
3)方式3 &
var person *Person = new(Person)
4)方式4 {}
var person *Person = &Person{}
说明:
1)第三种方式和第四种方式返回的是 结构体指针
2)结构体指针访问字段的标准方式应该是:(*结构体指针).字段名,比如:
(*person).Name = "tom"
3)但go做了一个简化,也支持 结构体指针.字段名,比如 person.Name = "tom"。更加符号程序员使用的习惯,go编译器底层对 person.Name 做了转化 (*persion).Name
★方法
方法注意事项和细节
1)结构体类型是值类型,在方法调用中,遵守值类型的传递机制,是“值拷贝”传递机制
2)如希望在方法中,修改结构体变量的值,可以通过结构体指针的方式类处理
3)Golang中的方法作用在指定的数量类型上的(即:和指定的数据类型绑定),因此自定义类型,都可以由方法,而不仅仅是sturt,比如int,float32等都可以由方法。
4)方法的访问范围控制的规则,和函数一样,方法名首字母小写,只能在本包访问,方法首字母大写,可以在本包和其它包访问
5)如果一个变量实现了String()这个方法,那么fmt.Println默认会调用这个变量的String()进行输出
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· SQL Server 2025 AI相关能力初探
· Linux系列:如何用 C#调用 C方法造成内存泄露
· AI与.NET技术实操系列(二):开始使用ML.NET
· 记一次.NET内存居高不下排查解决与启示
· 探究高空视频全景AR技术的实现原理
· 阿里最新开源QwQ-32B,效果媲美deepseek-r1满血版,部署成本又又又降低了!
· 单线程的Redis速度为什么快?
· SQL Server 2025 AI相关能力初探
· AI编程工具终极对决:字节Trae VS Cursor,谁才是开发者新宠?
· 展开说说关于C#中ORM框架的用法!