Golang学习笔记(六):struct
struct
struct,一组字段的集合,类似其他语言的class
放弃了大量包括继承在内的面向对象特性,只保留了组合(composition)这个最基础的特性
1.声明及初始化
type person struct {
name string
age int
}
//初始化
func main() {
var P person
P.name = "tom"
P.age = 25
fmt.Println(P.name)
P1 := person{"Tom1", 25}
fmt.Println(P1.name)
P2 := person{age: 24, name: "Tom"}
fmt.Println(P2.name)
}
2.struct的匿名字段(继承)
type Human struct {
name string
age int
weight int
}
tyep Student struct {
Human //匿名字段,默认Student包含了Human的所有字段
speciality string
}
mark := Student(Human{"mark", 25, 120}, "Computer Science")
mark.name
mark.age
能够实现字段继承,当字段名重复的时候,优先取外层的,可以通过指定struct名还决定取哪个
mark.Human = Human{"a", 55, 220}
mark.Human.age -= 1
struct不仅可以使用struct作为匿名字段,自定义类型、内置类型都可以作为匿名字段,而且可以在相应字段上做函数操作
3.method
type Rect struct {
x, y float64
width, height float64
}
//method
Reciver 默认以值传递,而非引用传递,还可以是指针
指针作为Receiver会对实例对象的内容发生操作,而普通类型作为Receiver仅仅是以副本作为操作对象,而不对原实例对象发生操作
func (r ReciverType) funcName(params) (results) {
}
如果一个method的receiver是*T,调用时,可以传递一个T类型的实例变量V,而不必用&V去调用这个method
func (r *Rect) Area() float64 {
return r.width * r.height
}
func (b *Box) SetColor(c Color) {
b.color = c
}
4.method继承和重写
采用组合的方式实现继承
type Human struct {
name string
}
type Student struct {
Human
School string
}
func (h *Human) SayHi() {
fmt.Println(h.name)
}
//则Student和Employee的实例可以调用
func main() {
h := Human{name: "human"}
fmt.Print(h.name)
h.SayHi()
s := Student{Human{"student"}}
s.SayHi()
}
还可以进行方法重写
funct (e *Student) SayHi() {
e.Human.SayHi()
fmt.Println(e.School)
}
相关文章
- 这篇文章主要介绍了golang 调用 php7详解及实例的相关资料,需要的朋友可以参考下...2017-01-15
- 这篇文章主要介绍了C# 结构体struct 的相关资料,帮助大家更好的理解和学习c#,感兴趣的朋友可以了解下...2020-11-03
- 这篇文章主要介绍了用golang实现替换某个文件中的字符串操作,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧...2021-04-25
- 这篇文章主要介绍了golang在GRPC中设置client的超时时间,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧...2021-04-27
- 这篇文章主要介绍了解决Golang json序列化字符串时多了\的情况,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧...2020-12-24
Golang中的自定义类型之间的转换的实现(type conversion)
这篇文章主要介绍了Golang中的自定义类型之间的转换的实现(type conversion),文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧...2021-02-21- 这篇文章主要介绍了golang与php实现计算两个经纬度之间距离的方法,结合实例形式对比分析了Go语言与php进行经纬度计算的相关数学运算技巧,需要的朋友可以参考下...2016-07-29
解决golang处理http response碰到的问题和需要注意的点
这篇文章主要介绍了解决golang处理http response碰到的问题和需要注意的点,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧...2020-12-16浅析Swift中struct与class的区别(汇编角度底层分析)
这篇文章主要介绍了Swift中struct与class的区别 ,本文从汇编角度分析struct与class的区别,通过实例代码给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友可以参考下...2020-06-30- 这篇文章主要介绍了golang http使用踩过的坑与填坑指南,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧...2021-04-27
- 这篇文章主要介绍了golang文件读取-按指定BUFF大小读取方式,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧...2020-12-22
- Go(又称Golang)是Google开发的一种静态强类型、编译型、并发型,并具有垃圾回收功能的编程语言。这篇文章给大家介绍golang 正则表达式的相关知识,感兴趣的朋友跟随小编一起看看吧...2021-05-07
- 这次文章为大家带来的是一个比较实用的示例:利用Golang生成整数随机数,对此感兴趣的可以一起来看看。 php随机数生成一个给定范围的随机数,用 PHP 就太简单不过了,而...2017-07-06
- 这篇文章主要介绍了golang DNS服务器的简单实现操作,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧...2021-05-01
- 这篇文章主要介绍了golang中json和struct的使用说明,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧...2021-05-01
@PostConstruct在项目启动时被执行两次或多次的原因及分析
这篇文章主要介绍了@PostConstruct在项目启动时被执行两次或多次的原因及分析,具有很好的参考价值,希望对大家有所帮助。如有错误或未考虑完全的地方,望不吝赐教...2021-08-03Fedora14 Linux系统安装Golang开发环境笔记
这篇文章主要介绍了Fedora14 Linux系统安装Golang开发环境笔记,本文讲解了2种安装方法,需要的朋友可以参考下...2020-05-01- 这篇文章主要介绍了golang去除多余空白字符(含制表符)的操作,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧...2021-04-25
golang elasticsearch Client的使用详解
这篇文章主要介绍了golang elasticsearch Client的使用详解,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧...2021-05-04- 这篇文章主要介绍了MapStruct解了对象映射的毒,对MapStruct感兴趣的同学,可以参考下...2021-04-23