首页 > 其他分享 >【go语言】3.1.2 接口的定义和实现

【go语言】3.1.2 接口的定义和实现

时间:2023-07-31 22:13:39浏览次数:40  
标签:Perimeter Area 实现 接口 Shape 3.1 go Rectangle

在 Go 中,接口是一种抽象类型,用来描述其他类型应该有哪些方法。它定义了一组方法,但没有实现。这些方法由其他类型实现。

接口的定义

接口定义的格式如下:

type InterfaceName interface {
    Method1(param1 type1, param2 type2) returntype1
    Method2(param1 type1, param2 type2) returntype2
    // 更多的方法...
}

例如,我们可以定义一个 Shape 接口,如下所示:

type Shape interface {
    Area() float64
    Perimeter() float64
}

这个 Shape 接口定义了两个方法:Area 和 Perimeter,分别用于计算形状的面积和周长。每个实现了 Shape 接口的类型都应该有这两个方法。

接口的实现

在 Go 中,我们不需要明确声明一个类型实现了哪个接口,只需要这个类型实现了接口定义的所有方法即可。

例如,我们可以定义一个 Rectangle 类型,并让它实现 Shape 接口:

type Rectangle struct {
    Width, Height float64
}

// 实现 Shape 接口的 Area 方法
func (r Rectangle) Area() float64 {
    return r.Width * r.Height
}

// 实现 Shape 接口的 Perimeter 方法
func (r Rectangle) Perimeter() float64 {
    return 2 * (r.Width + r.Height)
}

在这个例子中,Rectangle 类型实现了 Shape 接口的所有方法,因此,我们说 Rectangle 类型实现了 Shape 接口。

接口的使用

接口最常见的用途是作为函数的参数。通过这种方式,我们可以编写出更加通用和可重用的代码。

例如,我们可以定义一个函数,它接受一个 Shape 接口类型的参数:

func PrintShapeDetails(s Shape) {
    fmt.Printf("Area: %.2f, Perimeter: %.2f\n", s.Area(), s.Perimeter())
}

然后,我们可以将任何实现了 Shape 接口的类型作为参数传递给这个函数:

r := Rectangle{Width: 10, Height: 5}
PrintShapeDetails(r)

输出:

Area: 50.00, Perimeter: 30.00

总的来说,接口是 Go 语言中的一种强大的工具,它允许我们编写出更加通用和可重用的代码。任何类型只要实现了接口中定义的所有方法,就可以说它实现了该接口。
推荐阅读:

https://mp.weixin.qq.com/s/dV2JzXfgjDdCmWRmE0glDA

https://mp.weixin.qq.com/s/an83QZOWXHqll3SGPYTL5g

file

标签:Perimeter,Area,实现,接口,Shape,3.1,go,Rectangle
From: https://www.cnblogs.com/yaoqian/p/17594685.html

相关文章

  • 【13.0】DRF之接口文档
    【一】引入后端把接口写好后登录接口注册接口查询所有图书带过滤接口前端人员需要根据接口文档,进行前端开发前后端需要做对接---->对接第一个东西就是这个接口文档--->前端照着接口文档开发后端编写接口:后端团队负责设计和实现系统中的各个接口,根据业务需求完......
  • 脏读,不可重复读,幻读 ,mysql5.7以后默认隔离级别是什么?什么是qps,tps,并发量,pv,uv、什么是
    目录一、脏读,不可重复读,幻读,mysql5.7以后默认隔离级别是什么?脏读,不可重复读,幻读脏读不可重复读幻读mysql5.7以后默认隔离级别是什么二、什么是qps,tps,并发量,pv,uv三、什么是接口幂等性问题,如何解决?一、脏读,不可重复读,幻读,mysql5.7以后默认隔离级别是什么?程序访问数据库,往往是多......
  • 导入接口文档
      注册Yapi 点击添加项目,创建2个项目  进入项目点击数据管理 选择json 导入文件 ......
  • MongoDB数据库的部署和应用
    推荐步骤:在Centos01上部署MongoDB服务器客户端登录验证在centos01的MongoDB配置文件通过配置文件控制MongoDB服务,配置MongoDB身份验证在centos01的MongoDB服务器配置身份验证管理和修改配置文件支持验证在centos01管理MongoDB管理数据,集合批量数据管理实验步骤创建管理MongoDB组和......
  • Django 动态操作model
    fromdjango.appsimportappsforoinoids_result:oid_result=snmp.snmpWalk(o.oid)ifo.model_filed_nameandlen(o.model_filed_name)>0:field_name=o.model_filed_name.get('field_......
  • 通过局域网访问连接 vite 或 Django 之类的项目
    博客地址:https://www.cnblogs.com/zylyehuo/step1将vite或Django类的项目启动ip设置为0.0.0.0:端口step2查询本机电脑在当前局域网下的ipstep3将跳转路径改为查询到的本机ip,再加上第一步中设置的前端端口......
  • 【Jmeter问题分享】jmeter 中 Content-Type为multipart/form-data的接口的测试
    问题背景:测试项目中需要对前端提交的表单接口进行压力测试,通过fiddler抓包发现Content-Type为multipart/form-data,fiddler重放能正常提交。但是导入到jmeter上却无法成功一直是错误的结果。解决方案刚开始一直在查jmeter如何给Content-Type为multipart/form-data做接口测试,网上......
  • Python基础day56 Django URL分组设置
    URL函数的使用(支持正则表达式)#django1中使用的是urlurl('test',views.test),url函数的第一个参数是支持正则表达式的如果匹配到一个路由,就不在往下匹配,直接执行路由对应的视图函数#http://127.0.0.1:8000/test/是django默认设置的,django会先拿着test去匹配,如果匹配不......
  • URL函数的使用(支持正则表达式)、分组、反向解析、Django2的转换器、路由分发、伪静态的
    url('test',views.test),url函数的第一个参数是支持正则表达式的如果匹配到一个路由,就不在往下匹配,直接执行路由对应的视图函数 http://127.0.0.1:8000/test/是django默认设置的,django会先拿着test去匹配,如果匹配不到,它会自动加一个斜杠再次去匹配 去浏览器器搜索textadd只......
  • Google Hacking语法
    是什么?GoogleHacking是利用Google的高级搜索语法来查找特定类型的信息或暴露安全漏洞的技术。攻击者可以使用GoogleHacking技术来寻找敏感信息、未安全配置的服务器、漏洞等。常用的GoogleHacking语法site:使用site关键字可以搜索特定网站的页面,例如:site:baid......