首页 > 其他分享 >接口类型(Interface Type)和接口值(Interface Value)

接口类型(Interface Type)和接口值(Interface Value)

时间:2024-10-31 11:00:00浏览次数:3  
标签:接口 类型 接口类型 Speaker Interface 动态 Type

1. 接口类型(Interface Type)

接口类型定义了一组方法的集合,描述了实现该接口的类型所需的行为
它只是一个类型声明,指定了实现接口的类型必须包含哪些方法,而没有实现具体的功能。

在 Go 中,接口类型是通过 type InterfaceName interface {} 语法来定义的。例如:

type Speaker interface {
    Speak() string
}

在上面的代码中,Speaker 是一个接口类型,表示所有实现 Speak 方法的类型都可以被视为 Speaker 类型。
这种方式允许 Go 实现一种“隐式”接口,类型只需实现了接口中的所有方法,就被视为满足该接口。

2. 接口值(Interface Value)

接口值是在接口类型的变量中存储的具体值。接口值由两个部分组成:

  • 动态类型:接口值的动态类型表示该接口当前所持有的具体类型(即实现了接口的类型)。
  • 动态值:接口值的动态值表示该具体类型的实际值。

当一个接口变量持有一个具体类型的值时,这个值就是该接口的接口值。

示例:接口值的动态类型和动态值

type Speaker interface {
    Speak() string
}

type Dog struct{}

func (d Dog) Speak() string {
    return "Woof!"
}

func main() {
    var s Speaker     // 声明一个接口类型变量
    s = Dog{}         // 为接口赋值一个具体类型的值

    fmt.Println(s.Speak()) // 输出: Woof!
}

在这个例子中:

  • Speaker 是一个接口类型。
  • s 是一个接口类型的变量。

3. 接口值的动态类型与动态值关系

当一个接口变量没有被赋予任何实现类型的值时,它的动态类型和动态值都为 nil
一旦为接口变量赋予了一个具体的值,接口的动态类型和动态值都会相应变化。

示例:接口值的 nil

func describe(i interface{}) {
    fmt.Printf("(%v, %T)\n", i, i)
}

func main() {
    var s Speaker     // 声明一个接口变量
    describe(s)       // 输出: (<nil>, <nil>)

    s = Dog{}
    describe(s)       // 输出: ({}, main.Dog)
}

标签:接口,类型,接口类型,Speaker,Interface,动态,Type
From: https://www.cnblogs.com/niumachen/p/18517303

相关文章

  • HTTP 响应头信息与前后端交互时content-type重要性
    以下是响应头的大部分属性响应头信息中文翻译描述Date日期响应生成的日期和时间。例如:Wed,18Apr202412:00:00GMTServer服务器服务器软件的名称和版本。例如:Apache/2.4.1(Unix)Content-Type内容类型响应体的媒体类型(MIME类型),如text/html;charset=UTF-8,application/......
  • TYPE-C PD浅谈(二)- E-Marker
    E-Marker指的是在TYPE-C缆线中会被放置一颗识别IC,这等于是这条缆线的身份证,其功能主要是在宣告缆线的能力、缆线ID及制造商ID等。前面章节有提到当装置对接后,CC其中会有1pin变成VCONN供电出来,就是为了供电给E-marker来使用。对接后供电端(Provider)会去读取E-Marker的电流承载能......
  • TYPE-C PD浅谈(一)
    聊聊USBPowerDelivery两三事,接下来会依下列几个主题来探讨WhatisPowerDeliveryE-MarkerAttachedSourceCAPSinkCAPPowerRoleSwapDataRoleSwapVCONNSwapAlternateModeChargerDesignNoteWhatisPowerDeliveryUSB界面历经20年的演变,在界面上一直没有太......
  • Ctype.h头文件
    Ctype.h头文件字符测试函数名称如果是下列参数,返回值为真isalnum()字母或数字isdigit()数字isxdigit()十六进制字符isalpha()字母islower()小写字母isupper()大写字母iscntrl()控制字符,如Ctrl+Bisprint()可打印字符isblank()标准的空白......
  • Parameters参数、增删改标签、事务、typeAliases
    1.获取传入的参数值1.#{}形式传参,Mybatis会将SQL语句中的#{}转换为问号占位符?  <!--根据商品编号,查询商品信息--><selectid="selectById"parameterType="int"resultType="com.bdqn.pojo.Goods">   select*fromgoodswhereid=#{id}</select......
  • Shooter Game User Interface Starter
    射击游戏用户界面工具包这个工具包为射击游戏开发者提供了一套完整的UnityUI布局屏幕和预制件,旨在加速游戏界面的开发过程。以下是工具包的核心特性:屏幕布局:包含9个完整的UnityUI布局屏幕,覆盖装备、选项、游戏模式、大厅、社交、装备详情、登录、设置等多个游戏界面。......
  • yolov5 train报错:TypeError: expected np.ndarray (got numpy.ndarray)
    前言macintel机器上,使用yolov5物体检测训练时报错:TypeError:expectednp.ndarray(gotnumpy.ndarray)这个错误信息TypeError:expectednp.ndarray(gotnumpy.ndarray)看起来有些奇怪,因为numpy.ndarray实际上就是np.ndarray。通常情况下,这种错误可能是由于库版本不......
  • 常见的京东商品接口类型
    京东商品接口是京东开放平台提供给开发者的一系列接口,用于获取京东商品的相关信息或进行相关操作,以下是一些常见的京东商品接口类型及相关信息:一、商品详情查询接口:功能:根据商品ID,获取商品的详细信息,包括商品标题、价格、库存、促销信息、商品描述、图片、品牌、规格等。这是最......
  • element-ui table中使用type=‘selection‘ 实现禁用,勾选,默认选中不可修改 三种状态显
    element-uitable中使用type=‘selection’实现禁用,勾选,默认选中不可修改三种状态显示问题实现效果   需求1.status=‘CheckOk'时勾选框默认选中但不可修改勾选状态2.status=‘CheckFail'时勾选框禁用3.status=‘'时勾选框可以勾选实现思路采用el-table表格自......
  • Typescript使用全局变量
    使用全局变量声明并初始化变量global.tsexport{}declareglobal{ varg_v:number;}初始化全局变量g_ars.ts///<rferencepath="global.d.ts"/>gloal.g_v=43;在模块中使用globalfunctionhello(){console.log(global.g_v);}exportdefaulthello;......