新年学新语言Go之五

一、前言

Go虽然不算是面向对象语言,但它支持面向对象一些特性,面向接口编程是Go一个很重要的特性,而Go的接口与Java的接口区别很大,Go的接口比较复杂,这里仅用一个最简单例子做介绍,复杂的我也还没学。

二、接口定义与实现简单例子

与定义结构体(struct)类似,上面代码我们定义了Shaper接口,它有一个方法Area,任何实现了这个函数(或方法)的类型我们都认为它实现了Shaper接口。

说明

1、实现接口并不需要显式声明,不用像Java那样用implements实现接口,只需要实现接口中所有方法(函数)就表示实现了该接口。

2、接口可以被结构体(可以理解为长残了的类)实现,也可以被函数类型实现。

3、接口被实现条件 

  • 接口的方法与实现接口类型方法格式要完全一致,包括方法名、参数类型、返回值都需要完全一样。

  • 接口所有方法都被实现。

这点和Java没有什么区别。

4、area := Shaper(rect) 这条语句绑定了接口和结构体,然后就可以调用接口的方法了。

三、多态

面向对象三大特性,封装、继承及多态,Go既然支持了OOP,那多态的特性它肯定也要能支持的,多态简单理解就是在运行时决定使用哪个实现类,我们来看一个简单例子理解一下。

结构体1定义及对接口的实现

结构体2定义及对接口的实现

调用接口的函数会执行对应结构体函数的实现

根据运行时传入的是矩形还是三角形结构体调用对应的实现函数。

注:其实和Java中接口的概念还是比较类似的,Go相对更灵活吧(是指在调用时再去绑定接口和实现?偶还没领悟到灵活在哪?)

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

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

相关文章

filebeat(8.9.0)采集日志到logstash,由logstash发送的es

filebeat采集日志到logstash,由logstash发送的es 下载并配置filebeat下载配置logback.xml logstash配置 下载并配置filebeat 下载 参考 配置 filebeat.inputs: - type: filestreamenabled: truepaths:# 日志文件目录- D:\modellog\elkdemo\*\*.logparsers:# 多…

LeetCode2409——统计共同度过的日子数

博主的解法过于冗长,是一直对着不同的案例debug修改出来的,不建议学习。虽然提交成功了,但是自己最后都不知道写的是啥了哈哈哈。 package keepcoding.leetcode.leetcode2409; /*Alice 和 Bob 计划分别去罗马开会。给你四个字符串 arriveA…

分发糖果[困难]

优质博文:IT-BLOG-CN 一、题目 n个孩子站成一排。给你一个整数数组ratings表示每个孩子的评分。你需要按照以下要求,给这些孩子分发糖果: 【1】每个孩子至少分配到1个糖果。 【2】相邻两个孩子评分更高的孩子会获得更多的糖果。 请你给每个孩…

浅谈 docker run 命令中的 -i -t 和 -d 选项

以 docker Ubuntu 镜像为例,ubuntu镜像启动时默认执行的命令是"/bin/bash"。 文章目录 不带任何选项带 -i 选项带 -i 和 -t 选项-d 选项 不带任何选项 rootubuntu20:~# docker run ubuntu:20.04 rootubuntu20:~# docker ps CONTAINER ID IMAGE …

操作系统【OS】进程的控制【进程的创建、终止、阻塞、唤醒】

定义和过程 对应事件 创建 允许一个进程创建另一个进程允许子进程继承父进程所拥有的资源创建进程的过程如下: 申请一个空白的 PCB,并向 PCB 中填写一些控制和管理进程的信息,比如进程的唯一标识等;为该进程分配运行时所必需的…

源码安装Openlava 4.0

安装需求 基本硬件配置建议:CPU 4核或以上(LSF 没有最低 CPU 需求,此处只是建议)内存 8G或以上( 当没有作业在运行时, Linux x86-64 上集群中的 LSF 守护程序将使用大约 488 MB 内存。)交换空…

DDOS攻击的有效防护方式有哪些?

DDoS攻击简介: DDoS攻击,即分布式拒绝服务攻击(Distributed Denial of Service),是一种网络攻击,旨在通过向目标服务器发送大量恶意请求,使服务器资源耗尽,无法满足合法用户的需求&a…

网络协议--ARP:地址解析协议

4.1 引言 本章我们要讨论的问题是只对TCP/IP协议簇有意义的IP地址。数据链路如以太网或令牌环网都有自己的寻址机制(常常为48 bit地址),这是使用数据链路的任何网络层都必须遵从的。一个网络如以太网可以同时被不同的网络层使用。例如&#…

git创建与合并分支

文章目录 创建与合并分支分支管理的概念实际操作 解决冲突分支管理策略Bug分支Feature分支多人协作 创建与合并分支 分支管理的概念 分支在实际中有什么用呢?假设你准备开发一个新功能,但是需要两周才能完成,第一周你写了50%的代码&#xf…

shell的case选择

shell笔记 case语法结构 case语法结构 Caseesac语句与其他语言中的switch.case 语句类似,是一种多分支选择结构。case语句匹配一个值或一个模式,如果匹配成功,执行相匹配的命令。 case语法结构: case expr in #expr为表达式&am…

《动手学深度学习 Pytorch版》 9.6 编码器-解码器架构

为了处理这种长度可变的输入和输出, 可以设计一个包含两个主要组件的编码器-解码器(encoder-decoder)架构: 编码器(encoder):它接受一个长度可变的序列作为输入,并将其转换为具有固定…

React +AntD + From组件重复提交数据(已解决)

开发场景: react Hooks andt 提交form表单内容给数据库(使用antd的form组件) 问题描述 提交是异步的,请提交方式是POST 方式 提交表单内容给后端,却产生了两次提交记录(当然,数据新增了两条数据)。可以…

基于WebRTC的程序因虚拟内存不足导致闪退问题的排查以及解决办法的研究

目录 1、WebRTC简介 2、问题现象描述 3、将Windbg附加到目标进程上分析 3.1、Windbg没有附加到主程序进程上,没有感知到异常或中断 3.2、Windbg感知到了中断,中断在DebugBreak函数调用上 3.3、32位进程用户态虚拟地址和内核态虚拟地址的划分 …

引用折叠、万能引用、右值引用、move、完美转发

大家好,我叫徐锦桐,个人博客地址为www.xujintong.com。平时记录一下学习计算机过程中获取的知识,还有日常折腾的经验,欢迎大家来访。 在写STL源码的时候遇到的问题,在这里写一篇笔记记录一下。 一、引用折叠 引用折叠…

分享5个解决msvcp140.dll丢失的方法,全面解析msvcp140.dll丢失的原因

一、MSVCP140.dll是什么? 首先,我们需要了解什么是MSVCP140.dll。MSVCP140.dll是一个动态链接库文件,它是Microsoft Visual C 2015 Redistributable的一部分。这个文件包含了运行使用C编写的应用程序所需的一些函数和类。因此,当…

【单元测试】--测试驱动开发(TDD)

一、什么是测试驱动开发 测试驱动开发(Test-Driven Development,TDD)是一种软件开发方法,其核心思想是在编写实际代码之前,首先编写测试用例。TDD 的主要步骤如下: 编写测试用例:首先&#xf…

MongoDB URL链接 如何设置账号密码

个人博客,求关注。。 MongoDB URL链接 如何设置账号密码 假设你的账号是root,你的密码也是root,则 mongodb://username:passwordlocalhost:27017完美,再见。

探索LLM在图上学习的潜力10.14 暂停

探索LLM在图上学习的潜力 摘要介绍初步知识 摘要 Learning on Graph已经引起了极大的关注,因为它在现实世界中有广泛的应用。在具有文本节点属性的图形上进行学习的最流行的流程主要依赖于图神经网络(GNN),并利用浅层文本嵌入作为…

Maven系列第8篇:大型Maven项目,快速按需任意构建

本篇涉及到的内容属于神技能,多数使用maven的人都经常想要的一种功能,但是大多数人都不知道如何使用,废话不多说,上干货。 需求背景 我们需要做一个电商项目,一般都会做成微服务的形式,按业务进行划分&am…