Go 语言系列教程(八) : 结构体深入解析

前言

学习之前大家先思考一个问题–Go有对象?Go没对象,为什么呢?这个好难回答,不如换个问题:“You 为啥没对象?”
记得刚刚学c语言的时候,嗯,没有对象是很正常的。
学Java的时候,第一堂课,就是:“恭喜在座的各位,你们开始有对象了。”
Go没有对象?那还咋活!
没对象,又想要原来那种有对象的日子,怎么办?
好说好说,那就是假装自己有对象
于是啊,Go 没有继承,就找了干儿子当儿子。然后,表现出我有继承人。

下面给大家列举一个很有意思的例子
来自 [go语言中文社区–习惯研究所所长] https://studygolang.com/articles/22985

package main

// 1,养父类
type AdoptedFather struct {
   
}

// 2, 养父的遗产
func (af AdoptedFather) Show() {
    // 关键字func表示这是一个函数,第二个参数是结构体类型和实例变量(这样一来Go就知道了这是一个为结构体定义的方法。),第三个是函数名称,第四个是函数返回值
	println("I'm your Father! You succeeded in inheriting my legacy.")
}

// 3, 父类
type AdoptedChild struct {
   
	AdoptedFather
}

func main() {
   
	child := AdoptedChild{
   } // 干儿子
	child.Show()            // 继承干爹的遗产
}

结果

I'm your Father! You succeeded in inheriting my legacy.

PS :看不太懂?没有关系通过下面几小节的学习再回过头来就看的明白了。

一个成熟的类,具备成员变量和成员函数,结构体本身就有成员变量,再给他绑定上成员函数,一拍大腿,成了,这就是个类,谁来也是个类。好吧好吧,开个玩笑,Go确实没有类,但是可以通过组合模式来体现类的特征。毕竟Go语言可是号称万物皆类型。

下面让我们进入正题

结构体的声明

结构体是一种聚合的数据类型,是由零个或多个任意类型的值聚合成的实体。每个值称为结构体的成员。

	type Employee struct {
   
		ID        int
		Name      string
		Address   string
		DoB       time.Time //若未初始化则表示UTC时间,公元1年,1月,1日,0时,0分,0秒
		Position  string
		Salary    int
		ManagerID int
	}
	var dilbert Employee
	dilbert.Name = "dilbert"
	dilbert.Salary = 5000
	fmt.Println(dilbert)  // {0 dilbert  0001-01-01 00:00:00 +0000 UTC  5000 0}

除了.操作符我们还可以对成员取地址,然后通过指针访问

	var dilbert Employee
	dilbert.Name = "dilbert"
	name := &dilbert.Name
	*name = "new" + *name
	fmt.Print
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值