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])
}
相关推荐
Assby10 分钟前
从洋葱模型看Java与Go的设计哲学:为什么它们如此不同?
java·后端·架构
命运石之门的选择15 分钟前
Flink 并行度调优"黄金三步法"
后端
泰式大师16 分钟前
在 AI Agent 场景下,我们如何优雅地处理长文本?
后端
命运石之门的选择22 分钟前
Flink和CheckPoint简单了解
后端
Java水解38 分钟前
Python开发从入门到精通:Web框架Django实战
后端·python
回家路上绕了弯1 小时前
OpenClaw 本地 AI 智能体全解析
后端·agent
我爱娃哈哈2 小时前
Spring Cloud Gateway + 请求聚合(GraphQL-like):一次调用合并多个微服务响应
后端
用户298698530143 小时前
C#:三行代码,给 Word 文档的文本框“一键清空”
后端·c#·.net
血小溅3 小时前
Claude Code Superpowers 插件基础教程
后端
树獭叔叔3 小时前
OpenClaw Agents 系统:多代理架构与智能编排的完整技术解析
后端·aigc·openai