非零基础自学Golang 第12章 接口与类型 12.2 接口的创建与实现 12.2.2 接口赋值

news2024/11/19 14:36:59

非零基础自学Golang

文章目录

      • 非零基础自学Golang
      • 第12章 接口与类型
        • 12.2 接口的创建与实现
          • 12.2.2 接口赋值

第12章 接口与类型

12.2 接口的创建与实现

12.2.2 接口赋值

如果用户自定义的类型实现了某个接口类型所声明的一组方法,那么这个用户定义的类型的值就可以赋值给这个接口。

这个赋值会把用户定义的类型的值存入接口类型的值。

这里涉及接口变量,

接口变量存储了两部分信息

  • 一是分配给接口变量的具体值(接口实现者的值)
  • 二是值的类型的描述器(接口实现者的类型)。

简单来说,接口赋值存在以下两种情况:

  1. 将对象实例赋值给接口;
  2. 将一个接口赋值给另一个接口。

当一个对象的类型是一个接口的实例时,这个对象就可以赋值给这个接口。需要注意的是,只能将对象的指针赋值给接口变量,不能将对象值直接赋值给接口变量,否则就会发生错误。

[ 动手写12.2.6]

package main

import "fmt"

type IDatabaser interface {
   Connect() error
   Disconnect() error
}

// Redis数据库操作
type Redis struct {
   DBName string
}

func (redis *Redis) Connect() error {
   fmt.Println("Redis Connect DB => " + redis.DBName)
   //do Connect
   fmt.Println("Redis Connect Success!")
   return nil
}

func (redis *Redis) Disconnect() error {
   //do Disconnect
   fmt.Println("Redis Disconnect Success!")
   return nil
}

func main() {

   var redis = Redis{DBName: "teacher"}
   var idb IDatabaser = &redis

   idb.Connect()
   idb.Disconnect()
}

运行结果

在这里插入图片描述

这就是把对象的指针赋值给接口变量。

对于第二种情况(通过一个接口给另一个接口赋值),在Go语言中只要两个接口拥有同样的方法集(次序不同不要紧),那么它们就是相同的,可以相互赋值。如果两个接口不是相同的,接口A的方法集是接口B方法集的子集,那么接口B可以赋值给接口A,反之则不成立。

举个例子:

package main

import "fmt"

type IDatabaser interface {
   Connect() error
   Disconnect() error
}

type IRediser interface {
   Connect() error
}

// Redis数据库操作
type Redis struct {
   DBName string
}

func (redis *Redis) Connect() error {
   fmt.Println("Redis Connect DB => " + redis.DBName)
   //do Connect
   fmt.Println("Redis Connect Success!")
   return nil
}

func (redis *Redis) Disconnect() error {
   //do Disconnect
   fmt.Println("Redis Disconnect Success!")
   return nil
}

func main() {

   var idb IDatabaser = &Redis{DBName: "teacher"}

   var iredis IRediser

   iredis = idb
   iredis.Connect()
}

运行结果

在这里插入图片描述

没毛病,懂了!

动手写12.2.7中,IRediser接口的方法集是IDatabaser接口方法集的子集,IDatabaser接口变量就可以直接赋值给IRediser接口变量。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/106823.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

2021遥感应用组三等奖:基于PolSAR和高光谱遥感的黄河口湿地协同分类研究

作品介绍 一、作品概述 受人类活动和气候变化的影响,滨海湿地正经历着显著的变化。滨海湿地生态系统的监测具有重要的现实意义。同时,随着卫星遥感技术的快速发展,可以利用高空间分辨率、高光谱分辨率和高时间分辨率的多源数据对滨海湿地进行高精度分类。 本作品利用珠海1…

磨金石教育摄影技能干货分享|优秀手机摄影作品欣赏

在摄影中,动物摄影并不好拍,因为动物的姿态,所处的环境都不是人所能控制。所以需要摄影师们提早调整好参数,耐心的等待和观察。而且要反复多拍,才能得到心仪的照片。 这些还只是普通的动物摄影,还有难度更高…

sg90舵机基本认知

什么是舵机: 如下图所示,最便宜的舵机sg90,常用三根或者四根接线,黄色为PWM信号控制 用处:垃圾桶项目开盖用、智能小车的全比例转向、摄像头云台、机械臂等 常见的有0-90、0-180、0-360 怎末控制电机? …

硬件设备运行小程序,FinClip来帮忙

如今小程序技术日趋成熟,但大多小程序的运行都依赖于微信、百度、支付宝、今日头条等各大巨头,使得小程序的运营十分受限。并且,企业也更希望能实现“一次开发,多端运行”。因此,今天就来跟大家分享一下离开各大巨头&a…

20款前端特效动画及源码

最近优化项目时看到一些实用的特效 感觉还不错 下面就分享给大家 代码量过长的我就不展示了 可以去在这里资源站源码部分预览下载 1.Loading加载动画 在canvas画布上,我们动态绘制许多多边形,这些多边形伴随着颜色的随机变化和旋转,形成了奇…

KingbaseES Clusterware 高可用案例之---构建iSCSI共享存储

案例说明: 在KingbaseES Clusterware高可用的架构中,集群节点需要访问共享的存储设备,可以使用FC SAN、iscsi SAN、NAS等存储设备。本案例详细描述了,在Linux系统下构建 iscsi存储服务器及客户端访问的过程,为部署King…

8Manage SRM电子采购软件为企业带来采购优势

在如今各行行业竞争激烈的环境中,企业想要从中脱颖而出,利用现代化电子采购软件来建立优势是必不可少的。采用电子采购软件的优势越来越明显,其许多用途也越来越为人所知。企业使用电子采购的主要原因是为了控制强大的库存、减少采购重复和改…

GNU编译器常见伪操作

伪操作不会生成机器码,只是在编译阶段告诉编译器怎么做。类似于C语言中的 #if、#define 等带“#”的,#if 告诉编译器哪段不需要被编译,#define 告诉编译器哪些宏需要替换。 不同编译器,伪操作的语法不一样,这里主要介…

python帮我省下了这笔冤枉钱

背景 今天不得不说一说我这个电脑的事情。我这个电脑是2年前买的,屏幕非常大,是16寸的。 基本上没什么缺点,就是每隔一年,就要处理一下储存问题。 为什么呢,因为我的这台电脑的储存是512G的。所以不是太大。 但是今天…

【小学信息技术教资面试】《英文汉字巧切换》教案

题目:英文汉字巧切换内容: 基本要求: (1) 请在10分钟内完成试讲。 (2) 灵活切换汉字和英文字符。 (3) 试讲过程中涉及操作,进行演示即可。 《英文汉字巧切换…

如何准备考pmp?

我考的是旧考纲,5A 通过的,备考经验大家可以参考下,取长补短~ 一、复习计划的制定 根据之前在培训班共同奋斗的小伙伴学习时间统计,平均每天的学习时间是在 3-4 小时左右,基本上是白天 1 小时晚上 3 小时左右&#xf…

MySQL (二)------MySQL的使用、SQL的介绍

1.1 MySQL服务的启动 “我的电脑/计算机”-->右键-->“管理”-->“服务”-->启动和关闭MySQL服务 “开始菜单”-->“控制面板”-->“管理工具”-->“服务”-->启动和关闭MySQL “任务管理器”-->“服务”-->启动和关闭MySQL 或者 以管理员…

SQL练习题之求每个部门工资最高的人

冬至,又称日南至、冬节、亚岁。 文章目录前言一、题目二、表数据三、解答方法四、延伸思考题外话前言 分享自己做SQL练习时遇到的经典题目,供各位小伙伴参考。 一、题目 现有员工表employee,求每个部门工资最高的前五个员工的 id, name, de…

硬件系统工程师宝典(1)-----硬件系统设计应该从哪里开始?

系统设计举足轻重的一步,需求分析 今天我们开始读张志伟老师的《硬件系统工程师宝典》,这是一本非常好的入门书,对需求分析,电源、信号完整性,电源完整性,可制造性,原理图,pcb的详细…

风控特征变量如何命名

风控变量的命名相信是各位小伙伴,不管是策略还是模型开发的同学都会经常遇到的问题。如果变量不多,假设变量也就只有十几二十个左右,相信大家也不需要怎么处理,或许下面这样的简单命名方式就好了: 如VAR1~VARN&#x…

一套Abaqus常用子程序的二次开发和复杂应用攻略

当物体所受载荷是比较复杂的函数时(如与时间、位置等相关),通过界面输入的方式已经难以实现,通常便需要借助于DLOAD子程序来实现。下面将就ABAQUS软件的DLOAD子程序进行讲解和应用举例,希望通过此次讲解能够让更多的同…

01背包问题

01背包问题一、01背包问题1、问题描述2、问题性质分析3、动态规划思路(1)状态方程a.状态表示:b.状态转移:(2)循环的设计3、代码模板(1)朴素版(2)优化版一、01背包问题 1、问题描述 2、问题性质分析 这道题…

WEB接口测试之Jmeter接口测试自动化(初次接触)

软件测试自动化从不同的测试阶段分类,可从下层到上层依次分为单元测试-->接口测试-->界面自动化测试。 单元测试一般有开发人员自行完成,而界面自动化测试合适的测试条件又很难达到,测试人员在繁杂的手工界面测试之余, 更…

相信制造业品牌的实力:专访鸿雁全屋智能贵州总代理

作者 | 牧之 编辑 | 小沐 出品 | 智哪儿 zhinaer.cn长期以来,我们一直在讲智能家居市场的下沉,从一二线城市到三四线城市,从沿海到内陆。而事实上,印象中「欠发达」的内陆城市,对于智能家居的接受度可能比我们想象得要…

Qt中调用gRPC

RPC是Remote Procedure Call的简称,中文叫远程过程调用。 gRPC是由 google开发的一个高性能、通用的开源RPC框架,主要面向移动应用开发且基于HTTP/2协议标准而设计,同时支持大多数流行的编程语言。 一.编译gRPC 操作系统:window…