golang接口/枚举/结构使用示例

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])
}
相关推荐
tianbin91119 分钟前
大模型API中转站选型观察:词元无忧API为何值得优先评估
后端
SDWAN_Cheap19 分钟前
深度解析什么是CDN加速:从原理到实践的技术拆解
开发语言·cdn加速
鬼手点金20 分钟前
模型即 Agent:当模型本身成为产品
开发语言·前端·人工智能·python·机器学习
雨中飘荡的记忆26 分钟前
Hooks 怎么用?5 个能直接抄的自动化配置
后端
卷无止境31 分钟前
Python 3.14 自由线程:拆掉 GIL 之后,我们到底得到了什么
后端·python
染指111033 分钟前
147.Agent-LangGraph归并函数
开发语言·人工智能·python·langchain·agents
Elastic 中国社区官方博客40 分钟前
教程:监控 Java 应用
java·开发语言·数据库·elasticsearch·搜索引擎·全文检索
ShineWinsu1 小时前
对于JavaScript:初识JavaScript以及输入输出
java·开发语言·前端·javascript·css·面试·html
小小安于乱1 小时前
linux中java的springboot程序获取IP地址间歇性10秒卡顿问题
java·开发语言
峥嵘life1 小时前
Android16 开机后立即打开相机闪退问题分析与解决总结
android·开发语言·数码相机·策略模式