`
gandilong
  • 浏览: 4688 次
  • 性别: Icon_minigender_1
  • 来自: 河南省
社区版块
存档分类
最新评论

go语言 接口 小记

    博客分类:
  • go
 
阅读更多

 接口理解:
type Operation interface{
     Cut(a Integer)
     Add(a Integer)
}

type Integer int

func (a Integer)Cut(b int) Integer{
     return a-b
}

func (a Integer)Add(b int)Integer{
     return a+b
}

var a Integer =0
var foo Operation = a
go语言会自动根据a类型所具有的方法,也就是Integer所具有的方法 自动生成
func (a *Integer)Cut(b int) Integer{
     return a-b
}

func (a *Integer)Add(b int)Integer{
     return a+b
}

所以说 接口中的方法是针对类型实例的,毕竟一个接口没实现 啥也做不了,只有引用一个类型实例对像才行。
所以在给接口付值 时 ,每个类型实例会根据自己的类型所具有的方法生成 对应的实例方法。
如:
func (a Integer)Add(b int)Integer{
     return a+b
}
生成
func (a *Integer)Add(b int)Integer{
     return a+b
}


注意:
为接口付值 有两种方式
1. var foo Operation = a   这种方式 a 只是代表一个Integer类型的值,go语言会根据a的类型,即Integer的方法生成相应的方法。
但是如果Integer方法中有这样的方法:
func (a *Integer)Add(b int)Integer{
     return a+b
}
go语言是无法生成的。
所以需要第二种付值方式。
这种方式调用接口和调用类型方法一样,不会改变实例的实。

2.var foo Operation = &a
   在这两种方式中 其实foo就是一个指针,如果Integer没有实例方法,全都是类型方法,第一种方法 go可以自动生成实例方法 这种方法实用性不大,因为改变不了实例本身的值 。
正宗的应该是第二种。


所以正宗的写法应该是
type Operation interface{
     Cut(a Integer)
     Add(a Integer)
}

type Integer int

func (a Integer)Cut(b int) Integer{
     return a-b
}

func (a Integer)Add(b int)Integer{
     return a+b
}

var a Integer= 6
var foo Operation = &a


如果接口中有方法名是以大写字母开头的,即便写成小写 go也会按大写来。实现接口的类型也必须照要。你懂的。

分享到:
评论

相关推荐

    Go-什么车最适合跑滴滴——数据化思维小记

    Go语言,也被称为Golang,是由Google设计的一种静态类型、编译型的编程语言。它以其简洁的语法、高效的性能和内置并发支持而受到开发者们的欢迎,尤其适合于构建网络服务和处理大规模数据的应用场景。在滴滴出行这样...

    javascript语言结构小记(一)

    本篇小记将详细地介绍JavaScript语言中的几个关键结构特性,包括对Unicode字符集的支持、变量声明与初始化、以及类型运算符和算术运算符的使用。 首先,关于JavaScript支持Unicode字符集,这一点意味着在JavaScript...

    SRA2021-G03-系统接口文档 0.11

    小记接口提供了创建和查看小记的功能,帮助用户记录灵感或知识点。接口设计应包含新建小记的编辑功能和小记列表的获取。 8、个人主页接口 个人主页接口展示用户的个人知识库列表,可能包括用户创建或参与的问答、...

    Linux boost库安装、编译问题小记

    环境: Linux s12084 2.6.9-67.ELsmp #1 SMP Wed ...小记一下。以备以后参考。  boost 库做得真好。在windows 平台, linux 平台下编译都很顺利。hp aCC 也宣称对 boost 1.35 完全支持 。  全部编译是很痛苦的过程

    C++编程小记,经典收藏

    ### C++11 新特性详解 #### 一、Auto 关键字的新用途 - **旧用途**:在C++11之前,`auto`关键字主要用于指定变量的存储期。 - **新用途**:C++11引入了类型推断的概念,`auto`变成了一个类型占位符,用于告诉...

    LocalCache 学习小记1

    【LocalCache 学习小记1】 LocalCache 是一种本地高速缓存机制,它主要用于提升数据获取速度,尤其是在处理大量数据时,可以有效避免频繁访问远程数据库或分布式缓存,如 Redis 中的热键问题。LocalCache 不是...

    android开发小记

    在“android开发小记”这个主题中,我们可以深入探讨Android应用程序开发的相关知识,特别是通过查看提供的压缩文件中的代码示例。这些文件名如lesson_8_code.zip至lesson_20_codel.zip,以及不同的Mp3Player版本,...

    随笔小记.doc

    随笔小记.doc

    GeoStudio学习小记.pdf

    GeoStudio学习小记

    java小记.rar

    JDBC(Java Database Connectivity)是Java访问数据库的标准接口。在Java Web应用中,JDBC用于连接数据库、执行SQL语句、处理结果集等。开发者可能会在笔记中分享如何创建数据库连接池、事务管理策略以及如何优化SQL...

    【咬人草小记,阅读附答案】 咬人草小记阅读答案.docx

    这篇文章是关于一种名为“咬人草”的植物的描述和作者对其独特特性的体验与思考。咬人草在新疆地区生长,是一种看似普通的草本植物,却有着不寻常的防御机制——它的叶瓣上有尖锐的小刺,一旦触碰,就会像被毒蜂蜇...

    Thrift小记

    它通过定义一种中间表示(IDL,接口定义语言)来描述服务,允许开发者在不同的编程语言之间进行高效、可靠的序列化和通信。Thrift的主要目标是解决大规模分布式系统中的数据交换问题,它简化了服务之间的通信,并...

    刘重威将军小记.docx

    刘重威将军小记.docx

    海居小记_csdn

    标题“海居小记_csdn”中的“csdn”指的是中国知名的IT社区和技术交流平台“CSDN”,而“海居小记”似乎暗示着作者孙钢坪在海边居住时的所见所感,很可能是与海相关的生活笔记或游记。 描述“海居小记”并未给出...

    每日小记,记录账单和日记

    "每日小记"就是这样一款应用,它结合了记账和日记的功能,为用户提供了一个全面的生活记录平台。 首先,我们要了解记账的重要性。在个人财务管理中,记账是一个基础但至关重要的步骤。通过"每日小记",用户可以轻松...

    御风小记账本

    【御风小记账本】是一款由个人开发者利用Delphi编程语言精心打造的个人记账应用。Delphi,原名为Borland Delphi,是一种基于Object Pascal语言的集成开发环境,以其高效、快速的编译能力和对Windows API的深度支持而...

    随笔小记文档及若干代码

    随笔小记的文档,自己记录的一些文档,仅供参考

    C++写的家庭小记账本

    为了方便家庭财务管理,有人开发了一款基于C++编程语言的“家庭小记账本”程序,它以其小巧、易用的特点,为用户提供了便捷的记账服务。 这款家庭记账本软件的主要功能是帮助用户记录日常生活中的收支情况,以便于...

    阿里大数据分析平台使用小记

    阿里大数据分析平台使用小记 阿里大数据分析平台是阿里巴巴集团旗下的数据分析平台,提供了大数据处理、存储和分析的能力。该平台主要应用于天池大数据竞赛平台,提供了一些使用经验和教程,但不是完整的开发使用...

Global site tag (gtag.js) - Google Analytics