Go-interface基本概念

interface类型可以定义一组方法,但是这些不需要实现。并且interface不能包含任何变量。到某个自定义类型要使用的时候,再根据具体情况把这些方法写出来。

定义一个接口:

实现接口所有方法:

(1)接口里的所有方法都没有方法体,即接口的方法都是没有实现的方法。接口体现了程序设计的多态和高内聚低耦合的思想。

(2)Go中的接口,不需要显示的实现。只要一个变量,含有接口类型中的所有方法,那么这个变量就实现这个接口。因此,Go中没有implement关键字样。

(3)Go实现接口与方法有关,与接口本身叫什么名字没有特别大的关系。变量需要实现接口所有的方法。

(1)接口本身不能创建实例,但是可以指向一个实现了该接口的自定义类型的变量(实例)。

(2)接口中所有的方法都没有方法体,即都是没有实现的方法。

(3)在Go中,一个自定义类型需要将某个接口的所有方法都实现,我们说这个自定义类型实现了该接口。

(4)一个自定义类型只有实现了某个接口,才能将该自定义类型的实例(变量)赋给接口类型。

(5)只要是自定义数据类型就可以实现接口,不仅仅是结构体类型。

(6)一个自定义类型可以实现多个接口。

(7)Go接口不能有任何变量。

(8)一个接口可以继承多个别的接口,这时如果要实现这个接口必须实现它继承的所有接口的方法。在低版本的Go编辑器中,一个接口继承其他多个接口时,不允许继承的接口有相同的方法名。比如A接口继承B、C接口,B、C接口的方法名不能一样。高版本的Go编辑器没有相关问题。

(9)interface类型默认是一个指针(引用类型),如果没有对interface初始化就使用,那么会输出nil。

(10)空接口interface{}没有任何方法,所以所有类型都实现了空接口,即我们可以把任何一个变量赋给空接口类型。

以上资料来源:https://www.bilibili.com/video/BV1ME411Y71o?p=215&spm_id_from=pageDriver

Original: https://www.cnblogs.com/vivianwenwen/p/15127195.html
Author: 温昀
Title: Go-interface基本概念

原创文章受到原创版权保护。转载请注明出处:https://www.johngo689.com/585247/

转载文章受原作者版权保护。转载请注明原作者出处!

(0)

大家都在看

  • 方法的深度理解

    权限修饰符 返回值类型 类名(行参列表 )throws 异常的类型{ //方法体 约定俗称:子类中叫重写的方法,父类中叫被重写的方法。 ①子类重写的方法名和行参列表和父类被重写的方…

    Linux 2023年6月14日
    0104
  • Docker最常用的镜像命令和容器命令

    一、镜像相关命令 官方文档:https://docs.docker.com/referenc 1.1查看镜像 [root@localhost ~]# docker images R…

    Linux 2023年5月27日
    0105
  • python 练习题:使用迭代查找一个list中最小和最大值,并返回一个tuple

    python;gutter:true; -<em>- coding: utf-8 -</em>-</p> <p>请使用迭代查找一个l…

    Linux 2023年6月8日
    095
  • Linux嵌套目录权限的比较探究

    在/tmp目录下新建一个嵌套目录,名字分别为test_0、test_1、test_2。在test_2目录下新建普通文件,名为tryme。设置test_0和test_2的权限为777…

    Linux 2023年6月7日
    089
  • Java 8 中的 Stream 遍历树形结构

    树形结构数据处理 public class TreeDemo { public static void main(String[] args) { testtree(); } pu…

    Linux 2023年6月7日
    0122
  • 驱动写用户态应用程序的标准输出卡死

    问题描述 驱动写用户态应用程序的标准输出,pipe卡住,导致驱动不能正常继续工作注:感谢木三的解决方法. 问题解决 lsof 查看pipe管道 #lsof python3 2581…

    Linux 2023年6月6日
    0103
  • [转载]C++中new和malloc的区别

    new与malloc的10点区别 1. 申请的内存所在位置 new操作符从自由存储区(free store)上为对象动态分配内存空间,而malloc函数从堆上动态分配内存。自由存储…

    Linux 2023年6月7日
    082
  • SpringBoot-Redis

    SpringBoot 整合 Redis SpringBoot-Redis 15.1 导入相关依赖 org.springframework.boot spring-boot-star…

    Linux 2023年6月14日
    097
  • Apache Shiro 身份验证绕过漏洞 (CVE-2020-1957)

    一、漏洞描述 Apache Shiro 是一个功能强大且易于使用的 Java 安全框架,它执行身份验证、授权、加密和会话管理。 在具有 Spring 动态控制器的 1.5.2 之前…

    Linux 2023年6月13日
    0135
  • docker安装mysql

    -p 3306:3306 –name mysql -v /root/apply/docker/apply/mysql5.7/log:/var/log/mysql(日志文…

    Linux 2023年6月7日
    0127
  • [随记]-linux侦听端口的4种方法

    侦听 192.168.0.1 服务器上的 10086 端口是否打开 1. telnet telnet是windows 内置的功能,当然 linux 也有。用法: tenlet 19…

    Linux 2023年6月6日
    0110
  • Nginx—location配置

    Nginx—location配置 编辑nginx.conf文件 #user nobody; worker_processes 1; #error_log logs/error.lo…

    Linux 2023年6月11日
    094
  • 不自由的自由职业

    大家好,我是良许,前码农,现在自由职业者。 有关注我朋友圈的小伙伴都知道,就在上周,我刚刚结束了长达 35 天的「假期」。 此言一出,立刻掀起了评论区留言狂潮,大家纷纷问我,你特么…

    Linux 2023年6月14日
    087
  • 5.7 Linux Vim可视化模式

    相信大家都使用过带图形界面的操作系统中的文字编辑器,用户可以使用鼠标来选择要操作的文本,非常方便。在 Vim 编辑器中也有类似的功能,但不是通过鼠标,而是通过键盘来选择要操作的文本…

    Linux 2023年6月7日
    0129
  • Identity Server 4资源拥有者密码认证控制访问API(二)

    基于上一篇文章中的代码进行继续延伸,只需要小小的改动即可,不明白的地方可以先看看本人上一篇文章及源码: Identity Server 4客户端认证控制访问API 一、 Quick…

    Linux 2023年6月13日
    0114
  • 017 Linux 之啥是 ssh ?

    1 什么是 ssh?有什么用? (1)ssh 是一种协议 (2)ssh 服务 2 ssh 基于密匙的安全验证过程是怎样的? 3 对称加密与非对称加密区别是什么? (1)对称加密 (…

    Linux 2023年5月27日
    0120
亲爱的 Coder【最近整理,可免费获取】👉 最新必读书单  | 👏 面试题下载  | 🌎 免费的AI知识星球