Golang 结构体

结构体的定义

为了提高数据类型的灵活性,我们可以把基础数据类型聚合到一起形成一个新的数据类型,这个新的数据类型就是结构体,其中每个基础数据都是结构体的成员。

结构体的声明

定义结构体的关键字是 typestruct

type Data struct {
	id		int
	name	string
}

结构体的初始化

结构体一旦声明完成就可以使用结构体类型了,初始化有两种方式。

第一种,直接对类型进行初始化:

data := Data{1, "Golang"}

第二种,和基本类型使用方式一样,使用 var 关键字声明,使用 . 操作符赋值:

var data Data
data.id = 1
data.name = "Golang"

结构体的访问

访问结构体成员需要使用 . 操作符:

var d1 Data
var d2 Data

d1.id = 1
d1.name = "Golang"

d2.id = 2
d2.name = "极客点儿"

fmt.Println(d1)
fmt.Println(d2)

结构体的组合

Go 语言是没有设计面向对象的,不过我们可以通过各种方式模拟面向对象,结构体就有面向对象的特性:继承。

继承类型结构体中的组合,所谓组合就是把一个结构体嵌入到另一个结构体,从而达到继承的目的。

现在有两个结构体:

type Data struct {
	id		int
	name	string
}
type Demo struct {
	age		int
	user	string
}

Data 要继承 Demo 的成员,只需要在 Data 中定义一个匿名字段 DemoData 就用于 Demo 中所有的成员了:

type Demo struct {
	age		int
	user	string
}

type Data struct {
	id		int
	name	string
	Demo
}

完整代码示例:

package main

import "fmt"

type Demo struct {
	age		int
	user	string
}

type Data struct {
	id		int
	name	string
	Demo
}

func main () {

	var demo Demo
	demo.age = 18
	demo.user = "极客点儿"

	var data Data
	data.id = 1
	data.name = "Golang"
	data.Demo = demo

	fmt.Printf("%T\n", demo)
	fmt.Println(demo)
	
	fmt.Printf("%T\n", data)
	fmt.Println(data)

	fmt.Println(data.id, data.name, data.Demo, data.Demo.age, data.Demo.user)
	fmt.Println(data.id, data.name, data.Demo, data.age, data.user)
}

运行结果:

$ go run main.go 
main.Demo
{18 极客点儿}
main.Data
{1 Golang {18 极客点儿}}
1 Golang {18 极客点儿} 18 极客点儿
1 Golang {18 极客点儿} 18 极客点儿

从结果可以看到 Demo 中的字段已经合并到 Data 中了,可以通过 data.* 的方式直接访问,当然也可以通过 data.Demo.* 这样一级一级指下去的方式访问。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值