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