Go语言学习笔记十二--面向接口-接口组合

【Go基础】结构体、方法封装、结构体内嵌、接口 结构体、方法封装、结构体内嵌、接口 结构体、方法封装、结构体内嵌、接口 结构体 定义结构体 结构体变量的声明、赋值 方法封装 结构体的组合与内嵌 组合 内嵌(即:继承) 接口 相关资料 结构体 定义结构体 在很多语言中,面向对象编程需要使用"class"来定义类,在Go语言中并没有"class"关键字。早Go语言中,星耀面向对象编程,习惯上会先自定义一个类型,这个类型一般会以结构体的形式呈现: type TypeName struct { fieldName1 T1 field 阅读详情

接口的组合(类似Java中接口的多继承)

在GO中,接口的组合,类似于Java中接口的多继承.

接着 上一篇继续定义两个接口:

//定义一个post的接口
type Poster interface {
    Post(url string,params map[string]string)string
}
//接口组合: 定义一个 session接口
type Session interface {
    Poster
    Retriever
}

在mook.Retriever里实现Post方法:

package mook

type Retriever struct {
    Contents string
}

func (r *Retriever) Post(url string, params map[string]string) string {
    r.Contents = params["contents"]
    return "ok"
}


func (r *Retriever) Get(url string) string {
    return r.Contents
}
//定义一个session方法

func session(s Session) string {
    s.Post("http://www.imooc.com", map[string]string{"contents":"another a fake imooc.com"})
    s.Get("http://www.imooc.com")
    return "ok"
}

//定义一个方法,传入poster接口类型
func post(poster Poster) string {
    return poster.Post("http://www.imooc.com", map[string]string{"contents":"another a fake imooc.com"})
}



func main() {
    retriever := &mook.Retriever{"this is a fake imooc.com"}
    var r Retriever = retriever
    var p Poster = retriever
    download(retriever)
    post(retriever)
    session(retriever)
}

根据main方法里的实验,我们看到,因为mook.Retriever实现了Post方法,所以在GO语言体系中,其是接口类型Retriever也是Poster又是Session.

三个方法均可使用mook.Retriever{"this is a fake imooc.com"}传入.

接口的组合也非常的简单,直接将接口名写入接口内部即可,且还可以在接口内再定义自己的接口方法.


作者所有的学习源码在 go学习源码github地址,如果觉得有用的话帮小智贡献一个star?

告别Modern Standby烦恼:在Windows 11中手动启用S3睡眠模式的完整指南 本文详细介绍了如何在Windows 11中手动启用S3睡眠模式,解决Modern Standby(S0模式)导致的笔记本睡眠后耗电问题。通过注册表修改、电源选项调整、BIOS设置等步骤,帮助用户恢复传统深度睡眠功能,显著提升电池续航表现。 阅读详情

相关推荐

AES攻击方法 :差分密码分析 boomerang attack飞去来器攻击

AES具有123比特的分组长度,三种可选的密钥长度(128,192,256) AES是一个迭代型密码,轮数依赖于密钥长度。如果密钥长度为128比特,则轮数为10;如果密钥长度为192比特,则轮数为12;如果密钥长度为256比特,则轮数为14; 混淆(Confusion) 混淆是为了让密钥与密文的统计信息之间的关系变得复杂,从而增加通过统计方法进行攻击的难度。混淆可以通过各种代换算法实现,如S盒、乘法(加)与异或等运算组合,为非线性部件。 扩散(Diffusion) 扩散是为了让明文的单个比特影像到

m0_67105022的博客 3491

go语言接口(详解)

详细的介绍了Go语言接口类型,包括实现应用还有类型断言实现方法。相信阅读之后受益匪浅。

一个非常Cool的人 1万+

西门子WinCC VBS脚本实战:5分钟搞定变量记录导出到Excel(附完整代码)

本文提供了一套高效的西门子WinCC VBS脚本方案,帮助工程师在5分钟内将变量记录数据导出至Excel。方案详细解析了时区转换、数据库连接、SQL查询优化等核心难点,并附带了完整、可直接使用的VBS代码,解决了工业自动化项目中数据导出的实际痛点。

moss5的博客 609

go语言—接口

接口就是一系列方法的集合,但是还没有实现,需要对象自己去实现type 接口类型名 interface {

fanfjaiyun的博客 1329

【原创】Ubuntu20.04 安装 Isaac Gym 仿真器

Ubuntu20.04 安装 Isaac Gym

qq_54900679的博客 3086

RPA 财务共享中心与RPA赋能

在和集团财务官交流的时候,客户经常会提到FSSC,其中有准备建立FSSC,正在建立FSSC,以及已建成FSSC正使用的,当中会有些对FSSC的疑虑和问题,所以花费些时间对FSSC进行了深入调研,从而也有幸拜读了王兴山、陈剑、梅震、钱自严等专业人士写的几本关于FSSC的书,对FSSC的前因后果有了更深入的认识,同时结合自己在FSSC的一些项目经验,故做了本次分享。 本文章主要分享财务共享中心以及R...

weixin_40244959的博客 2756

GO语言中的接口(interface)

在Go语言中,接口(interface)是方法的集合,它允许我们定义一组方法但不实现它们,任何类型只要实现了这些方法,就被认为是实现了该接口。接口更重要的作用在于多态实现,它允许程序以多态的方式处理不同类型的值。接口体现了程序设计的多态和高内聚、低耦合的思想。

lp15929801907的博客 4321

XMind文件解析黑科技:用Python实现版本自适应读取(兼容2010-2024)

本文深入探讨了如何利用Python实现XMind文件的版本自适应解析,兼容从2010到2024年的各版本。通过分析XMind文件作为ZIP压缩包的本质,文章提供了智能探测文件内部结构(JSON或XML)并构建健壮读取逻辑的完整方案,有效解决了版本兼容性难题,并演示了将解析数据转换为PlantUML等下游应用的实战案例。

weixin_29041767的博客 682

[Go语言入门] 13 Go语言接口(interface)详解

Go语言入门, Go语言接口

时空旅客的专栏 7826

Copilot在游戏开发中的应用:Unity脚本自动生成实践

2021年GitHub Copilot的发布,为代码自动生成带来了革命性突破。作为基于GPT模型训练的AI辅助编程工具,Copilot能根据注释、函数名、代码上下文,实时生成符合语法和逻辑的代码片段,甚至完整脚本。减少重复劳动:自动生成模板代码(如生命周期、结构),让你专注核心逻辑;降低API学习成本:对Unity特有的组件(RigidbodyAnimator)、类(),Copilot能生成符合最佳实践的调用代码;统一代码风格:通过团队共享提示词模板,让生成的代码符合项目规范;快速原型迭代。

AIGC应用创新大全的博客 1617

Android 车载开发深度解析:CarPropertyManager 核心机制与实践指南

摘要: Android Automotive OS中,CarPropertyManager作为车载信息娱乐系统的核心组件,连接应用层与车辆硬件(如车速、油量等),其架构基于分层设计(App→CarAPI→VHAL→ECU),采用发布-订阅模式实现高效数据通信。通过HIDL/AIDL跨进程交互及共享内存优化,延迟可降至2ms以下。安全机制包括分级权限控制(VISIBLE/PROTECTED/SYSTEM_RESTRICTED)和HMAC防篡改。开发时需注意监听器生命周期管理、事件合并降负载及低功耗适配。

郑伟强dev的专栏 344

Go语言编程思想1——面向接口

接口的概念、接口的定义及实现、接口的值类型、接口的组合、常用系统接口(Stringer、Reader、Writer)

polarday的博客 569

【论文硬核拆解】Ctx2Skill:让大模型自己跟自己玩,从上下文里「进化」出可复用技能

论文选择自然语言技能可解释性:技能是人类可读的 Markdown 文件,可以审查、编辑、调试可迁移性:即插即用,从一个模型到另一个模型无需参数访问:对闭源模型友好这比 SKILL0/SkillRL 等参数内化方法更实用,尤其是在商业 API 场景。

步子哥的博客 151

Go(十二) 接口

type 接口类型名 interface{方法名1( 参数列表1 ) 返回值列表1方法名2( 参数列表2 ) 返回值列表2…}其中:接口类型名:Go语言的接口在命名时,一般会在单词后面添加er,如有写操作的接口叫Writer,有关闭操作的接口叫closer等。接口名最好要能突出该接口的类型含义。方法名:当方法名首字母是大写且这个接口类型名首字母也是大写时,这个方法可以被接口所在的包(package)之外的代码访问。参数列表、返回值列表:参数列表和返回值列表中的参数变量名可以省略。

LEO 672

TMS_WebGMaps_1.9.8.0_Full_Source

TMS_WebGMaps_1.9.8.0_Full_Source 全源码 delphi cbuilder

文档:亲测可用解决vnc灰屏,黑屏,鼠标大黑叉情况

主要解决vnc-viewer灰屏,黑屏,鼠标大黑叉等现象,详细见文档。

【链块技术30期】区块链基础语言(二十二)——Go语言面向对象

原文链接:区块链基础语言(二十二)——Go语言面向对象   一、面向过程和面向对象的区别   面向对象(Object Oriented,简称OO)和面向过程(Procedure Oriented,简称PO)是两种不同的编程思想。 1.1 面向过程的编程 面向过程编程(Process Oriented Programming,简称POP),以事物的发展过程为中心的编程思想,它根据流程一步...

链块学院 382

VC中sqlite的使用

在VC中对sqlite的使用,实现数据库大批数据的快速插入,读取数据库中的数据在ListCtrl中显示

让我们一起Go(十二)

前言: 上篇中,我们讲到了在Go语言中如何定义方法,今天,我们将进一步深入Go语言的面向对象编程。   一、Go语言中的接口 首先来看一个最基本的接口:   和定义一个结构体类似,只不过将struct换成了interface,然后声明了两个函数:draw()和count()。就这么简单,一个接口就定义好了,那么如何实现接口呢?在java中我们会让一个类去实现接口,在实现

虚月的专栏 928

C# WinForm 基于DirectShow.dll编写的程序,可边预览边保存视频,音频和图片

基于微软的DirectShow.dll的二次开发1.自动识别连接的摄像头跟麦克风且可以对其进行选择(默认选中第一个)2.可录制wmv和avi两种格式的视频并且都带有音频,avi可以录制的分辨率和帧数进行选择,wmv默认进行了淸晰度优化如不喜欢可去除代码中有相关提示3.可在预览点开之后进行拍照,也可边录制视频边拍照4.添加了视频和音频的压缩功能(酌情使用)这次二次开发发现C#对DirectShow的相关信息太少,这次做完也不敢藏私共享出来,还望大家指正

go语言学习笔记(十二)——结构体

前言 结构体类型表示的是数据结构,可以包含若干个具有确切的名字和类型的字段。我们可以为这些类型关联上一些方法,这里可以把方法看做函数的特殊版本。函数可以没有名字,可以当作值来看待,而方法没有这两个特性,最重要的是方法必须隶属于某一个方法。方法所属的类型会通过其声明中的接收者声明体现出来。 我们可以把结构体类型(struct)中的一个字段看做是该结构体类型的一个属性或一项数据,再把隶属于它...

tom和cat的博客 351

go学习总结(十二)面向对象

匿名字段 学生类(结构体),讲师类(结构体)等都有共同的成员(属性和方法),这样就存在重复,所以我们把这些重复的成员封装到一个父类(结构体)中。然后让学生类(结构体)和讲师类(结构体)继承父类(结构体) 接下来,我们可以先将公共的属性,封装到父类(结构体)中实现继承,关于方法(函数)的继承后面再讲。 匿名字段创建与初始化 那么怎样实现属性的继承呢? 可以通过匿名字段(也叫匿名组合)来实现,什么是匿名字段呢?通过如下使用,大家就明白了。 以上代码通过匿名字段实现了继承,将公共的属性封装在Person中,在S

bureau123的博客 276

Go学习笔记

系列文章目录 提示:这里可以添加系列文章的所有文章的目录,目录需要自己手动添加 例如:第一章 Python 机器学习入门之pandas的使用 提示:写完文章后,目录可以自动生成,如何生成可参考右边的帮助文档 文章目录系列文章目录前言第一阶段:Go语言编程基础入门一 初识Go语言Go开发环境搭建第一个Go程序Go命令介绍二 基础语法标识符与关键字操作符与表达式变量、常量、字面量变量作用域注释与Go DOC三 基础数据类型布尔整型浮点型枚举指针自定义类型三 复合数据类型数组切片MAP管道四 结构体结构体定义结

林长有的博客 2208

区块链基础语言(二十二)——Go语言面向对象

一、面向过程和面向对象的区别 面向对象(Object Oriented,简称OO)和面向过程(Procedure Oriented,简称PO)是两种不同的编程思想。 1.1 面向过程的编程 面向过程编程(Process Oriented Programming,简称POP),以事物的发展过程为中心的编程思想,它根据流程一步一步解决问题。 1.1.1 面向过程的程序设计 传统的面向过...

weixin_30817749的博客 162

Go结构体修仙传:从凡人到飞升,手把手教你修炼九重面向对象大法

go语言是可以支持中文作为变量名称的。为了方便理解,以及区分变量名称和关键字,下面的大部分变量都是用中文命名的。type 手机 struct {品牌 string价格 float64电量 int我的手机 := 手机{"菠萝", 5999.0, 100}这里是一个简单的结构体定义与命名,这就好比你去手机店说:“老板,给我装个手机!要菠萝牌的,顶配,充满电!结构体就是装数据的快递箱,把相关属性打包运输。看山是山:结构体就是个数据盒子看山不是山:结构体是面向对象的根基看山还是山。

weixin_47533318的博客 1299

golang 函数返回空字符串_最新 golang 课程更新了

点蓝字关注我们的最新第4期 golang 课程定于6.15 开课,共计26天,200个课时。具体详情可咨询课程顾问Amy课程具体的内容如下:第一天:golang介绍Golang 简介、特征、使用场景和应用环境安装第一个golang程序程序结构基本组成元素1.1.标识符1.2.关键字1.3.字面量1.4.操作符1.5.分隔符声明变量赋值常量作用域注释第二天: golang基础...

weixin_42601702的博客 1200

通过示例学习 Go 语言 2023(十五)

Golang 高级教程 来源:golangbyexample.com/golang-comprehensive-tutorial/ 目录 概述 Golang 基础教程 关于 基础 循环/迭代/流程控制 更多类型 并发 错误处理 Golang 高级教程 Golang 中的面向对象编程 其他 Golang 中的所有设计模式 创建型设计模式 行为型设计模式 结构型设计模式 Golang 中的数据结构 概述 欢迎来到 Golang

龙哥盟 816

Go语言圣经

第一章入门

kwdecsdn的博客 2754

golang 不同类型的参数_最新 golang 课程更新了

点蓝字关注我们的最新第4期 golang 课程定于6.15 开课,共计26天,200个课时。具体详情可咨询课程顾问Amy课程具体的内容如下:第一天:golang介绍Golang 简介、特征、使用场景和应用环境安装第一个golang程序程序结构基本组成元素1.1.标识符1.2.关键字1.3.字面量1.4.操作符1.5.分隔符声明变量赋值常量作用域注释第二天: golang基础...

weixin_30345333的博客 265
上一篇: Go语言学习笔记十一--面向接口-接口的定义与实现
下一篇: Go语言学习笔记十三--面向接口-常用系统接口
cdzjava
博客等级 码龄10年 2粉丝 16原创
评论 1
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值