返回顶部
首页 > 资讯 > 数据库 >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://lsjlt.com/news/59727.html(转载时请注明来源链接)

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

猜你喜欢
  • Go语言接口赋值实例介绍
    本篇内容主要讲解“Go语言接口赋值实例介绍”,感兴趣的朋友不妨来看看。本文介绍的方法操作简单快捷,实用性强。下面就让小编来带大家学习“Go语言接口赋值实例介绍”吧!将对象实例赋值给接口先看看将指定类型的对象...
    99+
    2024-04-02
  • go语言如何赋值
    go语言赋值的方法:1、使用“=”运算符进行赋值,其语法为“变量名 = 表达式”;2、go语言支持多个变量同时进行赋值,其语法为“变量1,变量2 = 表达式1,表达式2”;3、go语言支持多重赋值,先定义一个“foo”函数,返回两个整数,再...
    99+
    2023-07-12
  • C#接口方法的实例介绍
    本篇内容介绍了“C#接口方法的实例介绍”的有关知识,在实际案例的操作过程中,不少人都会遇到这样的困境,接下来就让小编带领大家学习一下如何处理这些情况吧!希望大家仔细阅读,能够学有所成!公有方法实现C#接口方法尽管C#在定义接口时不用指明接口...
    99+
    2023-06-18
  • go语言结构体怎么赋值
    在Go语言中,结构体的赋值可以通过两种方式进行:1. 通过字段名逐个赋值:可以使用`结构体变量名.字段名`的方式进行赋值。例如:``...
    99+
    2023-10-10
    go语言
  • go语言中的二维切片赋值
    先用append填充一维的,然后将一维append到二维 代码如下 var a [][]int for i := 0; i < 10; i++ { var t...
    99+
    2022-06-07
    GO 二维 赋值 go语言
  • go语言数组指针怎么赋值
    在Go语言中,可以通过以下两种方式来赋值数组指针: 使用 `&` 运算符获取数组的地址,然后将该地址赋值给指针变量。 packa...
    99+
    2023-10-25
    go语言
  • go语言map赋值有哪些形式
    go语言map赋值的形式有:1、使用“make”函数创建并初始化map,用“make”函数创建一个空的map并直接赋值;2、使用字面量创建并初始化map,用“{}”来直接创建并初始化一个map;3、使用多个赋值语句进行map赋值,用多个赋值...
    99+
    2023-07-12
  • R语言变量赋值的示例
    小编给大家分享一下R语言变量赋值的示例,希望大家阅读完这篇文章之后都有所收获,下面让我们一起去探讨吧!变量可以使用向左,向右且等于操作符来分配值。可以使用 print() 或 cat() 函数打印变量的值。cat() 函数将多个项目并成连续...
    99+
    2023-06-14
  • Go struct实例化和赋值实例分析
    这篇文章主要介绍“Go struct实例化和赋值实例分析”,在日常操作中,相信很多人在Go struct实例化和赋值实例分析问题上存在疑惑,小编查阅了各式资料,整理出简单好用的操作方法,希望对大家解答”Go struct实例化和赋值实例分析...
    99+
    2023-06-25
  • Go语言基础go接口用法示例详解
    目录概述语法定义接口实现接口空接口接口的组合总结 概述 Go 语言中的接口就是方法签名的集合,接口只有声明,没有实现,不包含变量。 语法 定义接口 type [接口名] inte...
    99+
    2024-04-02
  • Go 语言入门之Go 计时器介绍
    目录引言Go 的计时器Ticker 计时器是如何工作的?Ticker 使用方式总结引言 一般来说,很多时候我们面临这样一种情况,即我们需要运行时间记录器,它不断向我们显示当前时...
    99+
    2022-06-07
    GO 计时器
  • Go语言指针的详细介绍
    本篇内容介绍了“Go语言指针的详细介绍”的有关知识,在实际案例的操作过程中,不少人都会遇到这样的困境,接下来就让小编带领大家学习一下如何处理这些情况吧!希望大家仔细阅读,能够学有所成!Go语言为程序员提供了...
    99+
    2024-04-02
  • Go语言基础知识点介绍
    Go 语言教程 Go 是一个开源的编程语言,它能让构造简单、可靠且高效的软件变得容易。 Go是从2007年末由Robert Griesemer, Rob Pike, Ken Thom...
    99+
    2024-04-02
  • Go语言中DateTime的用法介绍
    一、基本使用 ①从属于time这个包 ②一般使用都是使用 time.Time 这个类型表示时间 ,time包中还有一些常量,源码如下 // Common durations. The...
    99+
    2024-04-02
  • Go语言中的Beego框架介绍
    Beego是一个基于MVC架构的Go语言Web框架,它提供了一整套的解决方案来简化Web应用程序的开发。Beego内置了很多功能模块,如路由、ORM、Session等,同时也提供了很多...
    99+
    2024-04-02
  • 介绍C语言中tolower函数的实例
    C语言tolower函数用于把大写字母转换为小写字母。 在本文中,我们先来介绍tolower函数的使用方法,然后编写一个自定义的_tolower函数,实现与tolower函数相同的功...
    99+
    2024-04-02
  • 不同语言中接口与Go语言接口的差异
    不同语言中接口与 Go 语言接口的差异 什么是接口? 接口是一种抽象概念,定义了一组方法或行为,而不需要定义这些方法的具体实现。接口允许程序员定义一组通用的规则或契约,而不管底层实现如...
    99+
    2024-04-12
    接口 go语言 python c#
  • Go语言同步机制解析:详细介绍与应用实例
    请稍等,我来为您创作这篇文章。以上就是Go语言同步机制解析:详细介绍与应用实例的详细内容,更多请关注编程网其它相关文章! ...
    99+
    2024-03-01
    go语言 应用实例 同步机制
  • Go语言接口开发实践指南
    Go语言接口开发实践指南 在Go语言中,接口是一种非常重要的概念,它能够帮助我们实现代码的灵活性和可复用性。接口定义了一组方法的集合,只要一个对象实现了这些方法,就被认为是实现了该接口...
    99+
    2024-04-02
  • Go语言接口开发实践手册
    积累知识,胜过积蓄金银!毕竟在Golang开发的过程中,会遇到各种各样的问题,往往都是一些细节知识点还没有掌握好而导致的,因此基础知识点的积累是很重要的。下面本文《Go语言接口开发实践手册》,就带大...
    99+
    2024-04-05
软考高级职称资格查询
编程网,编程工程师的家园,是目前国内优秀的开源技术社区之一,形成了由开源软件库、代码分享、资讯、协作翻译、讨论区和博客等几大频道内容,为IT开发者提供了一个发现、使用、并交流开源技术的平台。
  • 官方手机版

  • 微信公众号

  • 商务合作