一、用户自定义类型
- 声明结构类型
type user struct {
name string
sex int
age int
}
//使用结构类型声明变量,并初始化为其零值
var bill user
bill.name = "cdb"
fmt.Println(bill)//{cdb 0 0}
//使用结构字面量来声明一个结构类型的变量
lisi := user{name: "lisi", age: 12, sex: 22}
fmt.Println(lisi) //{lisi 22 12}
要么用零值(即变 量类型的默认值)做初始化。对数值类型来说,零值是 0;对字符串来说,零值是空字符串;对 布尔类型,零值是 false
- 结构嵌套
type student struct {
person user
school string
}
stu1 := student{
person: user{
name: "stu-1",
sex: 1,
age: 8,
},
school: "爱康啊",
}
fmt.Println(stu1)//{{stu-1 1 8} 爱康啊}
- 方法
func (u user) tellName() {
fmt.Printf("我的名字是%s", u.name)
}
func testMethod() {
user1 := user{
name: "cdb",
sex: 1,
}
user1.tellName()//我的名字是cdb
}
二、类型的本质
- 内置类型
内置类型是由语言提供的一组类型。我们已经见过这些类型,分别是数值类型、字符串类型 和布尔类型。这些类型本质上是原始的类型。因此,当对这些值进行增加或者删除的时候,会创 建一个新值。基于这个结论,当把这些类型的值传递给方法或者函数时,应该传递一个对应值的 副本 - 引用类型
Go 语言里的引用类型有:切片、映射、通道、接口和函数类型 - 结构类型
结构类型可以用来描述一组数据值,这组值的本质即可以是原始的,也可以是非原始的。如 果决定在某些东西需要删除或者添加某个结构类型的值时该结构类型的值不应该被更改,那么需 要遵守之前提到的内置类型和引用类型的规范