广告
返回顶部
首页 > 资讯 > 数据库 >Go语言接口赋值实例介绍
  • 340
分享到

Go语言接口赋值实例介绍

2024-04-02 19:04:59 340人浏览 八月长安
摘要

本篇内容主要讲解“Go语言接口赋值实例介绍”,感兴趣的朋友不妨来看看。本文介绍的方法操作简单快捷,实用性强。下面就让小编来带大家学习“Go语言接口赋值实例介绍”吧!将对象实例赋值给接口先看看将指定类型的对象

本篇内容主要讲解“Go语言接口赋值实例介绍”,感兴趣的朋友不妨来看看。本文介绍的方法操作简单快捷,实用性强。下面就让小编来带大家学习“Go语言接口赋值实例介绍”吧!

将对象实例赋值给接口

先看看将指定类型的对象实例赋值给接口,这要求该对象对应的类实现了接口要求的所有方法,这个是自然,否则也就不能算作实现该接口了,例如之前我们定义过一个Integer类型

type Integer int func (a Integer) Equal(i Integer) bool { return a == i} func (a Integer) LessThan(i Integer) bool { return a < i} func (a Integer) MoreThan(i Integer) bool { return a > i} func (a *Integer) Increase(i Integer) { *a = *a + i} func (a *Integer) Decrease(i Integer) { *a = *a - i}

相应地,我们定义一个接口IntNumber:

type IntNumber interface { Equal(i Integer) bool LessThan(i Integer) bool MoreThan(i Integer) bool Increase(i Integer) Decrease(i Integer)}

安装 Go 语言的约定,Integer类型实现了IntNumber接口。然后我们可以这样将Integer类型对应的对象实例赋值给IntNumber接口:

var a Integer = 1var b IntNumber = &a

注意到上述赋值语句中,我们将对象实例a的指针应用赋值给了接口变量,为什么要这么做呢?因为 Go 语言会根据类似下面这样的非指针成员方法:

func (a Integer) Equal(i Integer) bool

自动生成一个新的与之对应的指针成员方法:

func (a *Integer) Equal(i Integer) bool { return (*a).Equal(i)}

这样一来,类型*Integer就存在所有IntNumber接口中声明的方法,而Integer类型不包含指针方法Increase和Decrease(关于这一点我们前面已经介绍过),所以严格来说,只有*Integer类型实现了IntNumber接口。如果我们贸然将a的值引用赋值给b,编译时会报错:

cannot use a (type Integer) as type IntNumber in assignment: Integer does not implement IntNumber (Decrease method has pointer receiver)

显然,如果Integer类中实现的方法不是指针方法,则进行接口赋值时,传递对象实例的值引用给接口变量即可,否则需要传递指针变量。为了验证这一点,我们可以再创建一个新的接口IntNumber2:

type IntNumber2 interface { Equal(i Integer) bool LessThan(i Integer) bool MoreThan(i Integer) bool}

然后将对象实例a的值引用赋值给IntNumber接口变量:

var a Integer = 1varb1IntNumber=&avar b2 IntNumber2 = a

则上面两条接口赋值语句都可以编译通过。

将接口赋值给接口

接下来我们来看将一个接口赋值给另一个接口:在 Go 语言中,只要两个接口拥有相同的方法列表(与顺序无关),那么它们就是等同的,可以相互赋值。

下面我们来编写对应的示例代码,这是第一个接口Number1,位于oop1包中:

package oop1 type Number1 interface { Equal(i int) bool LessThan(i int) bool MoreThan(i int) bool}

这是第二个接口Number2,位于oop2包中:

package oop2 type Number2 interface { Equal(i int) bool MoreThan(i int) bool LessThan(i int) bool}

这里我们定义了两个接口,一个叫oop1.Number1,一个叫oop2.Number2,两者都定义五个相同的方法,只是顺序不同而已。在 Go 语言中,这两个接口实际上并无区别,因为:

任何实现了oop1.Number1接口的类,也实现了oop2.Number2;任何实现了oop1.Number1接口的对象实例都可以赋值给oop2.Number2,反之亦然;在任何地方使用oop1.Number1接口与使用oop2.Number2并无差异。

接下来我们定义一个实现了这两个接口的类Number:

type Number int; func (n Number) Equal(i int) bool { return int(n) == i;} func (n Number) LessThan(i int) bool { return int(n) < i;} func (n Number) MoreThan(i int) bool { return int(n) > i;}

所以下面这些赋值代码都是合法的,会编译通过:

var num1 Number = 1;var num2 oop1.Number1 = num1var num3 oop2.Number2 = num2

此外,接口赋值并不要求两个接口完全等价(方法完全相同)。如果接口 A 的方法列表是接口 B 的方法列表的子集,那么接口 B 可以赋值给接口 A。例如,假设Number2接口定义如下:

type Number2 interface { Equal(i int) bool MoreThan(i int) bool LessThan(i int) bool Add(i int)}

要让Number类继续保持实现这两个接口,需要在Number类定义中新增一个Add方法实现:

func (n *Number) Add(i int) { *n = *n + Number(i);}

接下来,将上面的接口赋值语句改写如下即可:

var num1 oop1.Number = 1;var num2 oop2.Number2 = &num1;var num3 oop1.Number1 = num2;

但是反过来不行:

var num1 oop1.Number = 1;var num2 oop1.Number1 = &num1;var num3 oop2.Number2 = num2; // 这一段编译出错

因为Number1接口中没有Add方法,这一点和 PHP/Java 中子类实例可以直接赋值给父类,而父类实例不能直接赋值给子类颇有些异曲同工。

到此,相信大家对“Go语言接口赋值实例介绍”有了更深的了解,不妨来实际操作一番吧!这里是编程网网站,更多相关内容可以进入相关频道进行查询,关注我们,继续学习!

您可能感兴趣的文档:

--结束END--

本文标题: Go语言接口赋值实例介绍

本文链接: https://www.lsjlt.com/news/59727.html(转载时请注明来源链接)

有问题或投稿请发送至: 邮箱/279061341@qq.com    QQ/279061341

本篇文章演示代码以及资料文档资料下载

下载Word文档到电脑,方便收藏和打印~

下载Word文档
猜你喜欢
  • Go语言接口赋值实例介绍
    本篇内容主要讲解“Go语言接口赋值实例介绍”,感兴趣的朋友不妨来看看。本文介绍的方法操作简单快捷,实用性强。下面就让小编来带大家学习“Go语言接口赋值实例介绍”吧!将对象实例赋值给接口先看看将指定类型的对象...
    99+
    2022-10-18
  • C#接口方法的实例介绍
    本篇内容介绍了“C#接口方法的实例介绍”的有关知识,在实际案例的操作过程中,不少人都会遇到这样的困境,接下来就让小编带领大家学习一下如何处理这些情况吧!希望大家仔细阅读,能够学有所成!公有方法实现C#接口方法尽管C#在定义接口时不用指明接口...
    99+
    2023-06-18
  • Go语言基础go接口用法示例详解
    目录概述语法定义接口实现接口空接口接口的组合总结 概述 Go 语言中的接口就是方法签名的集合,接口只有声明,没有实现,不包含变量。 语法 定义接口 type [接口名] inte...
    99+
    2022-11-12
  • 介绍C语言中tolower函数的实例
    C语言tolower函数用于把大写字母转换为小写字母。 在本文中,我们先来介绍tolower函数的使用方法,然后编写一个自定义的_tolower函数,实现与tolower函数相同的功...
    99+
    2022-11-12
  • go语言代码生成器code generator使用示例介绍
    目录代码生成器介绍code-generator示例代码生成tag全局tag局部tag补充代码生成器介绍 client-go为每种k8s内置资源提供了对应的clientset和info...
    99+
    2022-11-13
  • Go语言中io包核心接口示例详解
    目录前言ReaderWriterCloserSeeker组合接口总结前言 IO 操作是我们在编程中不可避免会遇到的,例如读写文件,Go语言的 io 包中提供了相关的接口,定义了...
    99+
    2022-06-07
    io GO 示例 go语言 接口
  • NumPy和Git接口在Go语言中的应用实例有哪些?
    NumPy和Git是两个非常流行的工具,它们在不同的领域中都有着广泛的应用。在这篇文章中,我们将探讨NumPy和Git接口在Go语言中的应用实例。 一、NumPy接口在Go语言中的应用实例 NumPy是Python中一个非常流行的数学库,它...
    99+
    2023-07-01
    numy git 接口
  • awk命令、awk编程语言详细介绍和实例
    一,什么是awk awk是linux下的一个命令,他对其他命令的输出,对文件的处理都十分强大,其实他更像一门编程语言,他可以自定义变量,有条件语句,有循环,有数组,有正则,有函数等。他读取输出,或者文件的方...
    99+
    2022-06-04
    详细介绍 编程语言 实例
  • C语言中qsort函数的介绍与用法实例
    目录一.qsort函数是什么 二.使用qsort排序-以升序为例1.整形数组排序2.字符数组排序3.字符指针数组排序4.结构体数组排序5.浮点型数组排序三.使用冒泡排序思想...
    99+
    2022-11-12
  • 介绍Go语言的设计与实现及Github开源项目
    Go语言设计与实现Github近年来,随着Web应用的快速发展和云计算的广泛应用,Go语言已成为众多开发者的首选。作为一门静态类型编程语言,Go语言在编译速度、并发能力、代码可读性等方面优势明显,因此备受关注。本文将介绍Go语言的设计与实现...
    99+
    2023-10-22
  • Go语言索引Apache接口:如何快速实现?
    Apache是一个非常流行的Web服务器,它支持多种编程语言,包括PHP,Python和Perl等。在这些语言中,Go语言也可以轻松地与Apache进行交互,实现快速的Web应用程序开发。本文将介绍如何使用Go语言索引Apache接口,以...
    99+
    2023-08-28
    索引 apache 接口
  • Go语言fsnotify接口实现监测文件修改
    目录引言安装工具关键类型Event结构体Op类型Watcher结构体Channel函数Watcher工厂函数完整例子引言 在开发过程中,经常需要观察本地文件系统的更改。经过谷歌了几个...
    99+
    2022-11-13
  • go语言interface接口继承多态示例及定义解析
    目录1.什么是接口2.接口定义3.多态多态加减计算器4.接口继承与转换5.空接口6.接口转换7.实现map字典接口8.interface案例1.什么是接口 接口就是一种规范与标准,在...
    99+
    2022-11-13
  • 十个示例带你深入了解Go语言中的接口
    1.空接口既然可以存储任意类型的值,那么从空接口获取到的值是否可以直接使用?看下面栗子 package main import (  "fmt" ) var a interfac...
    99+
    2023-02-17
    Go语言 接口使用 Go语言 接口 Go语言 接口示例
  • 日志记录在GO语言接口中的应用:学习实例分享
    日志记录在软件开发中是一个非常重要的环节,它可以帮助我们追踪和调试程序的运行情况,以及及时发现和解决潜在的问题。在Go语言开发中,我们可以通过一些第三方库来实现日志记录功能,比如logrus、zap等。但是,这些库都是基于结构体的,需要在...
    99+
    2023-06-25
    教程 接口 日志
  • GO语言如何实现实时大数据接口处理?
    随着互联网的发展,数据规模越来越大,对于数据的快速处理和分析成为了一项重要的任务。GO语言作为一种高效、可靠、可扩展的编程语言,可以很好地应对这个挑战。本文将介绍如何使用GO语言实现实时大数据接口处理。 一、了解实时大数据接口处理 实时大...
    99+
    2023-09-07
    大数据 接口 实时
  • 使用Go语言实现高效接口驱动容器
    随着云计算和容器技术的发展,越来越多的企业开始使用容器技术来部署和管理应用程序。然而,容器技术的快速发展也带来了新的挑战,如如何高效地管理和驱动容器,特别是在大规模的容器集群中。 在这篇文章中,我们将介绍如何。我们将使用Docker作为我...
    99+
    2023-09-29
    接口 容器 函数
  • Go语言中如何实现灵活的接口容器?
    在Go语言中,接口是非常重要的一种类型,它提供了一种将行为抽象出来的方式,使得我们可以定义一个通用的接口类型,然后通过实现该接口来实现具体的行为。接口是Go语言中的一个核心概念,也是Go语言中非常灵活和强大的一个特性。 在这篇文章中,我们...
    99+
    2023-09-29
    接口 容器 函数
  • 如何使用Go语言实现同步接口打包?
    在Go语言中,接口是一种非常重要的概念。它们允许我们定义一组方法,然后任何类型只要实现了这些方法就可以被视为这个接口的实现者。这种设计模式可以使代码更加灵活,可扩展性更强。但是,当我们需要将多个接口打包成一个时,我们可能会遇到一些困难。在...
    99+
    2023-05-31
    同步 接口 打包
  • Go语言-为什么返回值为接口类型,却返回结构体
    最近由于项目需求,阅读一些Go语言编写的项目的源代码,在某一个函数中发现了一个奇怪的现象:一个函数的返回值类型声明的是一个接口的类型,但是实际在函数体内返回的却是一个结构体类型...
    99+
    2022-06-07
    GO 结构体 返回值 go语言 接口
软考高级职称资格查询
编程网,编程工程师的家园,是目前国内优秀的开源技术社区之一,形成了由开源软件库、代码分享、资讯、协作翻译、讨论区和博客等几大频道内容,为IT开发者提供了一个发现、使用、并交流开源技术的平台。
  • 官方手机版

  • 微信公众号

  • 商务合作