结构体
[TOC]
结构体
结构体的声明方法
type Dog struct {
ID int
Name string
Age int
}
结构体的赋值方法
// 方式1
//var dog Dog
//dog.ID = 1
//dog.Name = "王胜"
//dog.Age = 50
// 方式2
//dog := Dog{ID: 1,Name: "王胜",Age: 50}
// 方式3
dog := new(Dog)
dog.ID = 1
dog.Name = "王胜"
dog.Age = 50
fmt.Println("dog: ",dog)
给结构体定义函数
func (d *Dog) Run() string {
fmt.Println(`run`)
return "Run"
}
func (d *Dog) Eat() string {
fmt.Println("吃")
return "eat"
}
使用的时候要实例化后再调用如
var dog struct_demo.Dog
dog.Eat()
或者
cat := struct_demo.Dog{}
cat.Run()
组合(继承)
type Animal struct {
Colour string
}
type Dog struct {
Animal
ID int
Name string
Age int
}
把Animal加入到Dog的结构体内,Dog就继承了Animal
外部引用
假如结构体写在根目录的Struct_demo文件夹下的Struct_demo.go文件里定义的 根目录的main文件引入的是
import (
"./Struct_demo"
)
定义接口类(隐性)
package _interface
type Behavior interface {
Run() string
Eat() string
}
Dog只要有这两个方法就自动继承了这个接口类
多态
定义
package struct_demo
import "fmt"
type Animal struct {
Colour string
}
type Dog struct {
Animal
ID int
Name string
Age int
}
type Cat struct {
Animal
ID int
Name string
Age int
}
func (d *Dog) Run() string {
fmt.Println(`dog run`)
return "Run"
}
func (d *Dog) Eat() string {
fmt.Println("dog 吃")
return "eat"
}
func (d *Cat) Run() string {
fmt.Println(`cat run`)
return "Run"
}
func (d *Cat) Eat() string {
fmt.Println(" cat 吃")
return "eat"
}
main函数里面这么调用
var a,b _interface.Behavior
a = new(struct_demo.Cat)
a.Eat()
b = new(struct_demo.Dog)
b.Run()
或者main函数里使用函数的方式
func main() {
dog := new(struct_demo.Dog)
cat := new(struct_demo.Cat)
action(dog)
action(cat)
}
func action(b _interface.Behavior) {
b.Eat()
b.Run()
}