1.接口定义
// geometry : 定义接口
type geometry interface {area() float64 //函数名 返回类型perim() float64 //函数名 返回类型
}
2.结构定义
// 定义结构area
type rect struct {width, height float64 //同类成员写一行,逗号隔开 / 成员名 类型
}// 定义结构circle
type circle struct {radius float64 //成员名 类型
}
3.实现接口方法
在go代码窗口右击弹出菜单,选择Generate ,在弹出的Generate菜单中选择 Implement Methods
先选择结构,后选择接口,然后生成
// area() : 实现接口方法area
func (a rect) area() float64 {return a.width * a.height
}// perim :实现接口方法perim
// func (参数名 类型) 函数名() 返回类型
func (a rect) perim() float64 {return 2*a.width + 2*a.height
}func (c circle) area() float64 {return math.Pi * c.radius * c.radius
}func (c circle) perim() float64 {return 2 * math.Pi * c.radius
}
4.定义接口调用函数
// 封装接口调用方法
// func 函数名(参数名 类型)
func callInterfaceGeometry(g geometry) {fmt.Println(g)fmt.Println("area:", g.area())fmt.Println("perim:", g.perim())
}
5.在主函数中调用并输出
func main() {fmt.Println("Go接口使用示例")//初始化结构,供接口调用r := rect{width: 5, height: 5}c := circle{radius: 5}//调用接口,传入结构callInterfaceGeometry(r)callInterfaceGeometry(c)//使用枚举s := 4switch s {case StateIdle:fmt.Println("StateIdle:", 0)breakcase StateConnected:fmt.Println("StateConnected:", 1)breakcase StateError:fmt.Println("StateError:", 2)breakcase StateRetrying:fmt.Println("StateRetrying:", 3)breakcase StateRunning:fmt.Println("StateRunning:", 4)breakdefault:fmt.Println("StateIdle:", -1)break}fmt.Println("状态:", stateMap[s])
}
输出:
Go接口使用示例
{5 5}
area: 25
perim: 20
{5}
area: 78.53981633974483
perim: 31.41592653589793
StateRunning: 4
状态: Running
完整示例:
package main//导入多个包,一行一个
import ("fmt""math"
)// 枚举定义
const (StateIdle = iota //iota表示未定义整数,默认为:0StateConnectedStateErrorStateRetryingStateRunning
)var stateMap = map[int]string{StateIdle: "Idle",StateConnected: "Connected",StateError: "Error",StateRetrying: "Retrying",StateRunning: "Running",
}// geometry : 定义接口
type geometry interface {area() float64 //函数名 返回类型perim() float64 //函数名 返回类型
}// 定义结构area
type rect struct {width, height float64 //同类成员写一行,逗号隔开 / 成员名 类型
}// 定义结构circle
type circle struct {radius float64 //成员名 类型
}// area() : 实现接口方法area
func (a rect) area() float64 {return a.width * a.height
}// perim :实现接口方法perim
// func (参数名 类型) 函数名() 返回类型
func (a rect) perim() float64 {return 2*a.width + 2*a.height
}func (c circle) area() float64 {return math.Pi * c.radius * c.radius
}func (c circle) perim() float64 {return 2 * math.Pi * c.radius
}// 封装接口调用方法
// func 函数名(参数名 类型)
func callInterfaceGeometry(g geometry) {fmt.Println(g)fmt.Println("area:", g.area())fmt.Println("perim:", g.perim())
}func main() {fmt.Println("Go接口使用示例")//初始化结构,供接口调用r := rect{width: 5, height: 5}c := circle{radius: 5}//调用接口,传入结构callInterfaceGeometry(r)callInterfaceGeometry(c)//使用枚举s := 4switch s {case StateIdle:fmt.Println("StateIdle:", 0)breakcase StateConnected:fmt.Println("StateConnected:", 1)breakcase StateError:fmt.Println("StateError:", 2)breakcase StateRetrying:fmt.Println("StateRetrying:", 3)breakcase StateRunning:fmt.Println("StateRunning:", 4)breakdefault:fmt.Println("StateIdle:", -1)break}fmt.Println("状态:", stateMap[s])
}