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

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])
}

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/diannao/22265.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

堆盘子00

题目链接 堆盘子 题目描述 注意点 SetOfStacks应该由多个栈组成,并且在前一个栈填满时新建一个栈 解答思路 将多个栈存储到一个List中,当入栈时,如果List中最后一个栈容量已经达到cap,则需要新建一个栈,将元素推到…

springboot新生宿舍选取小程序-计算机毕业设计源码56499

摘 要 随着我国经济迅速发展,人们对手机的需求越来越大,各种手机软件也都在被广泛应用,但是对于手机进行数据信息管理,对于手机的各种软件也是备受用户的喜爱,新生宿舍选取小程序管理系统被用户普遍使用,为…

数据开发面试题

如何保证数据指标的正确性? 1.上线前测试: 1.1.表内各指标/维度的验证。 验证需求所需维度在表中完全存在且唯一,很多交叉维度时,很容易漏了某一个或多写。 对于可累加的指标,总维度是其细分维度值的累加&#xff0…

简述React 和 Vue 的 diff 时间复杂度从 O(n^3) 优化 到 O(n) ,那么 O(n^3) 和 O(n) 是如何计算出来的 ?

React 和 Vue 的 diffing 算法(即虚拟DOM比较算法)的优化过程是一个复杂的过程,涉及到多个层面的设计和优化。从 O(n^3) 优化到 O(n) 的时间复杂度并不是简单地通过一个步骤完成的,而是经过了一系列的改进和优化。 O(n^3) 的可能…

QT 篇 五、手把手教学用QT编写TCP上位机并显示温湿度

QT应用篇 一、QT上位机串口编程 二、QML用Image组件实现Progress Bar 的效果 三、QML自定义显示SpinBox的加减按键图片及显示值效果 四、window编译LibModbus库并用QT编写一个Modbus主机 五、手把手教学用QT编写TCP上位机并显示温湿度 文章目录 QT应用篇软件篇1.新建QT工程2.U…

PW1558A规格探秘:为何它是电源系统不可或缺的6A双向保护芯片?

描述 PW1558A 是一款先进的 28V 6A 额定双向负载开关, 提供过载、 短路、 输入电压浪涌、 过大冲击电流和过热保护, 为系统供电。 内置的 24mΩ超低 RDS(ON)电源开关有助于减少正常操作期间的功率损耗。 该设备具有两个输入/输出端口 VBUS1 和 VBUS2&…

遥感之智能优化算法大纲介绍

介绍近年来在遥感及人工智能领域研究比较火热的智能优化算法,其中被广泛使用的比如粒子群算法和遗传算法等,在遥感领域,比如高光谱特征选择,机器学习超参数优化等方向有众多的应用,除了提到了两个算法之外,…

实验11 OSPF协议配置

实验11 OSPF协议配置 一、OSPF单区域配置(一)原理描述(二)实验目的(三)实验内容(四)实验配置(五)实验步骤 二、OSPF多区域配置(一)原理…

5252DE 5G 外场通信测试仪

5252DE 5G 外场通信测试仪 集先进算法和高性能硬件于一体的便携式测试仪表 产品综述 5252DE 5G 外场通信测试仪是集合高性能频谱处理模块、多制式解析算法软件于一体的手持式测试仪表,具有很好的便携性、兼容性与可拓展性。 5252DE 具有工作频段宽、性能指标高…

SOLIDWORKS修改零件时出现错误怎么办?

我们在使用SOLIDWOKRS进行零件建模过程中往往避免不了修改,但在修改后又常常会出现零件报错的情况,设计树中会出现一堆的错误和警告,我们如何快速处理这些问题呢? 我们都知道SOLIDWOKRS零件通常包含两大类的对象,分别…

骑行无界,勇者无限!2024COSP上海国际户外展带您畅享生活的速度与激情!

随着夏日来临,越来越多的人选择借由“绿色骑行”去触碰一座城市的脉搏,“城市骑行”正在成为时尚潮流活动和生活休闲方式。对于一部分城市打工人来说,自行车是一种通勤的工具,骑行成为健身的新选择。 在小红书里输入“骑行”&…

主机CPU访问PCIe设备内存空间和PCIe设备访问主机内存空间

在x86体系架构中,主机CPU访问PCIe设备内存空间和PCIe设备访问主机内存空间的过程涉及多个层次的地址映射和转换。以下是详细的解释: 主机CPU访问PCIe设备内存空间 1. CPU生成虚拟地址(Virtual Address, VA): 在x86架构中&#…

springboot如何快速接入minio对象存储

1.在项目中添加 Minio 的依赖&#xff0c;在使用 Minio 之前&#xff0c;需要在项目中添加 Minio 的依赖。可以在 Maven 的 pom.xml 文件中添加以下依赖&#xff1a; <dependency><groupId>io.minio</groupId><artifactId>minio</artifactId>&l…

Python语言在地球科学交叉领域中的技术应用

Python是功能强大、免费、开源&#xff0c;实现面向对象的编程语言&#xff0c;Python能够运行在Linux、Windows、Macintosh、AIX操作系统上及不同平台&#xff08;x86和arm&#xff09;&#xff0c;Python简洁的语法和对动态输入的支持&#xff0c;再加上解释性语言的本质&…

以30大龄转行AI真的难吗?绝对不是的!

前言 在这个快速变化的时代&#xff0c;"30岁门槛"似乎成了许多人心中的一道坎&#xff0c;尤其是在考虑职业转型时。当提到转向人工智能&#xff08;AI&#xff09;这样技术驱动的领域&#xff0c;一些人可能会担忧年龄成为阻碍。然而&#xff0c;事实证明&#xf…

汽车区域控制器技术分析

汽车区域控制器的起源与发展 随着汽车技术的不断发展,汽车电子电气架构也在经历着深刻的变革。汽车区域控制器作为一种新兴的技术,正逐渐成为汽车电子电气架构的重要组成部分。 在早期,汽车电子电气架构主要采用分布式架构。这种架构下,各个电子控制单元(ECU)分别负责不…

python垃圾自动清理机制

Python的垃圾自动清理机制是一个关键特性&#xff0c;它帮助开发人员更有效地管理内存&#xff0c;减少内存泄漏的风险。以下是Python垃圾自动清理机制的主要组成部分和原理&#xff0c;按照清晰的分点表示和归纳&#xff1a; 引用计数机制 原理&#xff1a;Python通过跟踪对…

新增节点增加权限

1、Linux用户权限 Linux 系统中采用三位十进制数表示权限&#xff0c;如0755&#xff0c; 0644。 ABCD A&#xff0d;0&#xff0c; 表示十进制 B&#xff0d;用户 C&#xff0d;组用户 D&#xff0d;其他用户 权限配置数字含义—0(no excute , no write ,no read)–x1excut…

深度学习Week15——利用TensorFlow实现猫狗识别2

文章目录 深度学习Week15——利用TensorFlow实现猫狗识别2—数据增强 一、前言 二、我的环境 三、前期工作 1、配置环境 2、导入数据 四、数据预处理 1、加载数据 2、可视化数据 3、检查数据 4、配置数据集 五、构建VGG-16模型 1、设置动态学习率 2、早停与保存最佳模型参数 五…

ERP实施过程中的注意问题

1.需求分析,确定现实目标 国内企业发展越来越快,管理模式逐渐跟不上市场的发展,所以急需用ERP系统来提高管理,这种情况往往存在需求风险。企业在准备应用ERP系统之前,需要理性地进行需求分析:企业当前最迫切需要解决的问题是什么?ERP系统是否能够解决?在财力上企业能不能支持…