Golang中interface的基本用法详解

yizhihongxing

Golang中interface的基本用法详解

什么是interface

interface 是一组需要实现的方法的列表。类似于其他语言中的抽象类,interface 是 Golang 中实现多态的机制之一。具有相同行为特征的实现方法就可以可以实现相同的 interface,相同的 interface 可被相互替换使用。interface 可以理解为是一种规范,接口是一种能力。

在 Golang 中,interface 是一个接口类型,通常定义如下:

type InterfaceName interface {
    MethodName1(args) ReturnType
    MethodName2(args) ReturnType
    // ...
}

interface 由 InterfaceName + 方法列表组成。其中,InterfaceName 是 interface 的名称,它是一个 Go 类型。方法列表是 interface 包含的方法,方法名+参数列表+返回值都被包含在内。

interface 的基本使用

声明 interface 类型变量

在 Golang 中,interface 类型变量可以存储具有相同方法的任何类型的值。比如:

type Animal interface {
    Say() string
}

type Cat struct{}

func (c Cat) Say() string {
    return "猫:喵喵喵"
}

type Dog struct{}

func (d Dog) Say() string {
    return "狗:汪汪汪"
}

func main() {
    var a Animal
    c := Cat{}
    d := Dog{}
    a = c
    fmt.Println(a.Say()) // 猫:喵喵喵
    a = d
    fmt.Println(a.Say()) // 狗:汪汪汪
}

上述代码中,Animal 是一个 interface。它包含一个 Say() 方法。Cat 和 Dog 类型都实现了 Say() 方法,因此它们可以被赋值给 Animal 类型的变量。在 main 函数中,定义了变量 a,它的类型为 Animal。首先把 Cat 的实例赋值给 a,然后执行 a.Say() 输出“猫:喵喵喵”,接着又将 Dog 的实例赋值给 a,执行 a.Say() 输出“狗:汪汪汪”。

判断变量是否实现了某个 interface

在 Golang 中,可以使用 type assertion 和 comma-ok 来判断变量是否实现了某个 interface。

type Animal interface {
    Say() string
}

type Cat struct{}

func (c Cat) Say() string {
    return "猫:喵喵喵"
}

func main() {
    var a interface{} = Cat{}
    animal, ok := a.(Animal)
    if ok {
        fmt.Println(animal.Say()) // 猫:喵喵喵
    } else {
        fmt.Println("转换失败!")
    }
}

上述代码中,首先定义了一个 Cat 类的实例 a,然后通过 a.(Animal) 进行类型转换,如果类型转换成功,则表示变量 a 是 Animal 类型。这个方式有一个问题,就是必须明确地知道变量 a 的类型。

本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:Golang中interface的基本用法详解 - Python技术站

(0)
上一篇 2023年6月26日
下一篇 2023年6月26日

相关文章

  • git之协同开发

    以下是关于“git之协同开发”的完整攻略,包括基本概念、解决方法、示例说明和注意事项。 基本概念 Git是一种分布式版本控制系统,可以帮助团队协同开。在Git中,每个开发者都可以在本地创建自己的分支,进行开发和测试,然后将代码合并到主分中。Git提供了多种协同开发的工具和技术,包括分支合并、拉取请求等。 解决方法 以下是使用Git进行协同开发的解决方法: 创…

    other 2023年5月7日
    00
  • windowsserver2008r2安装

    Windows Server 2008 R2 安装 Windows Server 2008 R2 是微软发布的一款具有高度稳定性和安全性的操作系统,常用于企业服务器和云服务器中。本文将介绍Windows Server 2008 R2的安装方法。 硬件要求 在安装Windows Server 2008 R2之前,需要确保计算机的硬件符合以下要求: 64 位的处…

    其他 2023年3月29日
    00
  • 【转】winrar命令行详解

    【转】winrar命令行详解 WinRAR是一个强大的文件压缩、解压缩软件,常常被用于在Windows系统中对文件进行压缩、备份和归档。除了通过图形界面使用WinRAR,还可以通过命令行来使用它提供的功能。本文将详细解释WinRAR的命令行参数及其用法。 WinRAR命令行用法 WinRAR的命令行用法如下: WinRAR [<命令>] -[&l…

    其他 2023年3月28日
    00
  • Selenium环境变量配置(火狐浏览器)及验证实现

    下面是Selenium环境变量配置(火狐浏览器)及验证实现的完整攻略。 环境变量配置 下载与Firefox浏览器版本对应的geckodriver驱动,官网下载地址为:https://github.com/mozilla/geckodriver/releases。 将下载好的geckodriver.exe文件置于指定的文件夹路径中(如:C:\Program F…

    other 2023年6月27日
    00
  • JavaScript ES新特性块级作用域

    JavaScript ES新特性:块级作用域 在ES6(ECMAScript 2015)之前,JavaScript中只有全局作用域和函数作用域。ES6引入了块级作用域,使得变量的作用范围可以限定在代码块内部。 块级作用域的定义 块级作用域是指由一对花括号({})包裹起来的代码块,例如if语句、for循环、函数等。在块级作用域中声明的变量只在该作用域内部有效,…

    other 2023年8月19日
    00
  • vim进入粘贴模式

    Vim进入粘贴模式的完整攻略 Vim是一种常用的文本编辑器,可以在Linux、Unix和Mac OS X等操作系统中使用。在Vim中,有时需要进入粘贴模式,以便更好地处理复制和粘贴的文本。本文将介绍如何进入Vim的粘贴模式,并提供两个示例说明。 进入粘贴模式 在Vim中,可以使用以下命令进入粘贴模式: :set paste 这个命令将Vim设置为粘贴模式,以…

    other 2023年5月9日
    00
  • javascript动态创建script标签并执行js代码

    JavaScript动态创建script标签并执行JS代码 在Web开发过程中,我们经常需要加载来自第三方或其他网站的JavaScript代码。为了防止这些代码对我们网站的其他部分产生负面影响,我们通常会将其放置在一个受控制的环境中。一种常见的做法是,动态创建script标签并将其添加到我们网站的头部或尾部,然后让浏览器去执行这些代码。 本文将讲解如何利用J…

    其他 2023年3月29日
    00
  • 使用变量动态设置js的属性名

    使用变量动态设置 JavaScript 的属性名可以通过两种方式实现:点符号和方括号符号。 1. 点符号 使用点符号可以直接在对象上设置属性名,但是属性名必须是一个有效的标识符。 示例1:动态设置属性名为变量值 const propertyName = ‘name’; const obj = {}; obj[propertyName] = ‘John’; c…

    other 2023年8月9日
    00
合作推广
合作推广
分享本页
返回顶部