结构体及其使用方法
结构体的定义
package main
import "fmt"
type Shengwu struct {
life bool
cell bool
age int
}
type Animal struct {
name string
age int
Shengwu //嵌入类型
}
func New() Animal{
s := Shengwu{age: 100,life:true,cell:true}
return Animal{
name: "wenxuwan",
age: 10,
Shengwu: s,
}
}
func (s Shengwu)setAge(age int){
s.age = age
}
//PrintAge函数两个结构体里面都有,如果直接用animal调用会发生屏蔽现象
func (s *Shengwu)PrintAge(){
fmt.Println("The shengwu age is:",s.age)
}
func (a *Animal) PrintAge(){
fmt.Println("The annimal age is:",a.age)
}
func (a Animal) PrintName(){
fmt.Println("The annimal name is :",a.name)
}
func (a *Animal) SetAge(age int){
a.age = age
}
func (a Animal) SetAgeCp(age int){
a.age = age
}
func main(){
animal1 := New()
animal1.PrintName()
//animal1.SetAge(100)
animal1.SetAgeCp(1000)
animal1.PrintAge()
}
Go语言用嵌入式字段实现了继承吗??
GO语言不存在所谓的继承,只有组合。组合和继承的区别就在于,组合是非侵入式的,而继承是侵入式的。也就是说组合子类不需要关注父类的东西。只需要嵌入进来就可享受父类的一切。
GO语言不存在所谓的继承,更不是通过嵌入实现继承!!!
值方法和指针方法都是什么意思,有什么区别???
func (a *Animal) SetAge(age int){
a.age = age
}
func (a Animal) SetAgeCp(age int){
a.age = age
}
两个方法都是改变变量age的值,唯一的区别在于前面的接收者一个是指针一个是变量。主要区别有三点:
1.值方法对值得成员的修改一般不会改变外面值得值,除了引用类型。但指针的会修改原值。
2.一个自定义的数据类型只包含它的值方法,但类型的指针却涵盖了所有的值方法和所有的指针方法。
animal1 := New()
//animal1.PrintName()
animal1.SetAge(100) //go自动将annimal1转成了&animal
3.老师的demo30很清楚讲的。
思考题
1.我们可以在结构体类型中嵌入某个类型的指针吗,如果可以,有哪些注意事项?
可以的,链表就这样干的。注意赋值,不用直接使用。
字面变量struct{}代表什么?有什么用?
个人感觉,代表没有属性,但拥有结构体的功能,比如拥有方法。