1. 接口
1.1 概念
把所有的具有共性的方法定义在一起,任何其他类型只要实现了这些方法就是实现了这个接口。
1.2 定义接口
/* 定义接口 */
type interface_name interface {
method_name1 [return_type]
method_name2 [return_type]
method_name3 [return_type]
...
method_namen [return_type]
}
/* 定义结构体 */
type struct_name struct {
/* variables */
}
/* 实现接口方法 */
func (struct_name_variable struct_name) method_name1() [return_type] {
/* 方法实现 */
}
...
func (struct_name_variable struct_name) method_namen() [return_type] {
/* 方法实现*/
}
2. 示例
-
代码结构
image.png
2.1 struct_demo
定义结构体和方法
package struct_demo
import "fmt"
type Power struct {
Atk int
Def int
}
//定义西蜀结构体
type Xishu struct {
ID int
Name string
Age int
Position string
Power
}
//定义东吴结构体
type Dongwu struct {
ID int
Name string
Age int
Position string
Power
}
//定义 西蜀方法一
func (xishu *Xishu)Infor01() string {
fmt.Println("蜀将个人信息")
fmt.Println("姓名: ",xishu.Name)
fmt.Println("职务: ",xishu.Position)
return "蜀将个人信息"
}
//定义 西蜀方法二
func (xishu *Xishu)Infor02() string {
fmt.Println("蜀将战力")
fmt.Println("攻击力: ",xishu.Atk)
fmt.Println("防御力: ",xishu.Def)
return "蜀将战力"
}
//定义 东吴方法一
func (dongwu *Dongwu)Infor01() string {
fmt.Println("吴将个人信息")
fmt.Println("姓名: ",dongwu.Name)
fmt.Println("职务: ",dongwu.Position)
return "吴将个人信息"
}
//定义 东吴方法二
func (dongwu *Dongwu)Infor02() string {
fmt.Println("吴将战力")
fmt.Println("攻击力: ",dongwu.Atk)
fmt.Println("防御力: ",dongwu.Def)
return "武将战力"
}
2.2 interface_demo
定义接口
package interface_demo
//定义一个接口
type Behavior interface {
Infor01() string
Infor02() string
}
2.3 main.go
调用方法
package main
import (
"814/interface_demo"
"814/struct_demo"
"fmt"
)
func main () {
//定义刘备数据
liubei := new(struct_demo.Xishu)
liubei.ID = 0
liubei.Name = "刘备"
liubei.Age = 28
liubei.Position = "主公"
liubei.Atk = 200
liubei.Def = 300
//定义周瑜数据
zhouyu := new(struct_demo.Dongwu)
zhouyu.ID = 0
zhouyu.Name = "周瑜"
zhouyu.Age = 20
zhouyu.Position = "大都督"
zhouyu.Atk = 400
zhouyu.Def = 300
//调用后边创建的"调用接口的函数",分别将刘备、周瑜数据传入
action(liubei)
action(zhouyu)
}
//定义一个函数,调用接口
func action( b interface_demo.Behavior) string {
fmt.Println("#################")
b.Infor01()
fmt.Println("-------------------")
b.Infor02()
return ""
}
2.4 运行结果
#################
蜀将个人信息
姓名: 刘备
职务: 主公
-------------------
蜀将战力
攻击力: 200
防御力: 300
#################
吴将个人信息
姓名: 周瑜
职务: 大都督
-------------------
吴将战力
攻击力: 400
防御力: 300
Process finished with the exit code 0
网友评论