Golang


文章目录


1 继承

Golang的继承比较简单,因为Golang的继承追求的是简单。不像Java那样复杂。
下面的实例给出了继承的最简单的应用
实例1

package main
import "fmt"
type A struct{
age int
}
type C struct{
age int
}
type B struct{
C
A
name string
}
func main(){
var b B
b.A.age = 20
fmt.Println(b.A.age)
b.C.age = 40
fmt.Println(b.C.age)
fmt.Println(b)
}

强调 ·1
如果是多继承的话,那么继承的如果两个父亲都有相同字段的话,那么必须要在输出的时候显示这个父亲的名称。
如果没有相同字段的话那么可以不用显示父亲的名称。

实例2

type Goods struct{
name string
price float64
}
type Brands struct{
name string
address string
}
type TV struct{
Goods
Brands

}
func main(){
tv := TV{Goods{"电视机",4000},Brands{"海尔","上海"},}
fmt.Println(tv)
tv2 :=TV{
Goods{
name : "电视机",
price : 5000,
},Brands{
name : "基德",
address : "北京",
},
}
fmt.Println(tv2)
}

这个实例表示出来了如何在创建变量的时候赋值的情况。
有两种方法。且要注意其中的逗号等细节。

实例3

type Goods struct{
name string
price int
}
type Brands struct{
name string
address string
}
type TV struct{
*Goods
*Brands

}
func main(){
tv := TV{&Goods{"电视机",5000},&Brands{"戴尔","山东"},}
fmt.Println(*tv.Goods)
}

传入指针是效率比较传值来说更高的。所有上面的实例我用了传入指针的方法去创建变量且赋值
在Golang的底层有指针的优化,这个要注意。

实例4

type master struct{
name string
age int
}
type A struct{
//结构体的匿名字段也是基本数据类型
//但是不可以有两个int的匿名字段
master
int

}
func main(){
//匿名字段的演示
var a A
a.int = 50
a.name = "tom"
a.age = 50
fmt.Println(a)
}

上面的实例表示出了匿名字段可以是基本数据类型也可以是结构体,可以是int,float64或者bool型
但是不可以有重复的基本数据类型。不然编译的时候编译器会分不清是哪一个数据类型。