在 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

【go语言】3.1.2 接口的定义和实现的更多相关文章

  1. go语言之进阶篇接口的定义和实现以及接口的继承

    1.接口的定义和实现以及接口的继承 示例: package main import "fmt" //定义接口类型 type Humaner interface { //方法,只有声 ...

  2. 【48】java抽象类和接口的定义和区别

    首先看看他们的区别: 接口和内部类为我们提供了一种将接口与实现分离的更加结构化的方法. 抽象类与接口是Java语言中对抽象概念进行定义的两种机制,正是由于他们的存在才赋予java强大的面向对象的能力. ...

  3. 初识 go 语言:方法,接口及并发

    目录 方法,接口及并发 方法 接口 并发 信道 结束语 前言: go语言的第四篇文章,主要讲述go语言中的方法,包括指针,结构体,数组,切片,映射,函数闭包等,每个都提供了示例,可直接运行. 方法,接 ...

  4. Go语言规格说明书 之 接口类型(Interface types)

    go version go1.11 windows/amd64 本文为阅读Go语言中文官网的规则说明书(https://golang.google.cn/ref/spec)而做的笔记,介绍Go语言的  ...

  5. Go语言学习笔记(9)——接口类型

    接口 Go 语言提供了另外一种数据类型即接口,它把所有的具有共性的方法定义在一起,任何其他类型只要实现了这些方法就是实现了这个接口. /* 定义接口 */ type interface_name in ...

  6. Java面向对象系列(14)- 接口的定义与实现

    接口 普通类:只有具体实现 抽象类:具体实现和规范(抽象方法)都有 接口:只有规范!约束和实现分离 接口就是规范,定义的是一组规则,体现了现实世界中"如果你是-则必须能-"的思想. ...

  7. java接口中定义成员变量

    //抽象类中可以定义如下成员变量:public abstract class People { public String name; public int age; public abstract ...

  8. java中接口的定义和接口的实现

    1.接口的定义 使用interface来定义一个接口.接口定义同类的定义类似,也是分为接口的声明和接口体,其中接口体由常量定义和方法定义两部分组成.定义接口的基本格式如下: [修饰符] interfa ...

  9. C++中 接口的定义 COM

    首先定义一个虚基类的接口,其中包含虚函数AddRef Release QueryInterface,(MFC 类IUnKnown unknwn.h)分别是增加减去引用计数和查询接口然后定义一个实现类, ...

  10. java 子接口中定义与父接口相同的方法

    今天碰到一个很有意思的问题,在java中如果子接口中定义了与父接口中已经有的方法会发生什么事情呢?比如: interface IRunnable extends Runnable{ void run( ...

随机推荐

  1. [Pytorch框架] 2.4 卷积神经网络简介

    文章目录 2.4 卷积神经网络简介 2.4.1 为什么要用卷积神经网络 2.4.2结构组成 卷积层 卷积计算 卷积核大小 f 边界填充 (p)adding 步长 (s)tride 计算公式 卷积层 激 ...

  2. SPN在域环境的应用

    windows域为了集中资源,有效地对资源访问控制权限进行细粒度分配,提高网络资源统一分配的管理.域内的每种资源分配了不同的服务主体名称(SERVICE Pricipal Name,SPN) 相关概念 ...

  3. 2023-03-21:音视频解混合(demuxer)为MP3和H264,用go语言编写。

    2023-03-21:音视频解混合(demuxer)为MP3和H264,用go语言编写. 答案2023-03-21: 步骤1:安装github.com/moonfdd/ffmpeg-go go get ...

  4. 2023-01-01:remix-ide是浏览器的ide,官方已经提供地址,但是需要连接外网。如果是内网,需要自己在服务器里搭建remix-ide;另一种方式是用remix-ide的桌面版。这里只讨论

    2023-01-01:remix-ide是浏览器的ide,官方已经提供地址,但是需要连接外网.如果是内网,需要自己在服务器里搭建remix-ide:另一种方式是用remix-ide的桌面版.这里只讨论 ...

  5. 2022-10-12:以下go语言代码输出什么?A:1;B:2;C:panic;D:不能编译。 package main import “fmt“ func main() { m := m

    2022-10-12:以下go语言代码输出什么?A:1:B:2:C:panic:D:不能编译. package main import "fmt" func main() { m ...

  6. Selenium - 元素操作(3) - 下拉框操作

    Selenium - 元素操作 下拉框才做可以分为两类: select标签的下拉框:使用Select类进行操作: 非select标签的下拉框:一般是 ul,li, div 等标签组成,使用元素定位的方 ...

  7. 【Linux】详解六种配置Linux环境变量的方法(以centos为例)

    本文时间 2023-05-19 作者:sugerqube漆瓷 本文重理解,!!忽略环境变量加载原理!! 本文目标:理解六大环境变量配置,选择合适的配置文件进行配置 配置环境的理由 以shell编程为例 ...

  8. Linux,会这些就够了

    在测试当中,其实对Linux的要求不高,我们在工作中需要记住常用的一些命令,不常用的实际用到的时候再查在记即可,最重要我们要使用命令可以查看日志,定位bug   目录篇: 可用  pwd  命令查看用 ...

  9. Vue3.3 的新功能的体验(下):泛型组件(Generic Component) 与 defineSlots

    上一篇说了 DefineOptions.defineModel.Props 的响应式解构和从外部导入类型 这几个新功能,但是没有说Generic.defineSlots等,这是因为还没有完全搞清楚可以 ...

  10. C#识别文字内容并分类输出0和1

    这个代码最开始是为了处理在调查问卷的结果,问卷星等调查问卷有一部分是用汉字描述的多选题,问卷系统在输出问卷的时候直接就是将汉字进行输出,而我们在进行数据分析(二元logistic或多项logistic ...