一.提前感受go语言的面向对象 1.入门案例:求两点间距离 main ( ???) Point?{ ???X,?Y?float64 } Distance(q,?p?Point)?float64?{ ???math.Hypot(q.X?-?p.X,?q.Y?-?p.Y) } (this?Point)?Distance??(another?Point)?float64?{ ???math.Hypot(this.X?-?another.X,?this.Y?-?another.Y) } main()?{ ???point1?:=?Point{,?} ???point2?:=?Point{,?} ???fmt.Println(Distance(point1,?point2)) ???fmt.Println(point1.Distance(point2)) } 假设你是一个懂C++、java或者其他编程语言的人,咱们以大家比较熟悉java语言为例, 先说明类型系统是什么样的,其实在java这样的语言,存在两套完全独立的类型系统:一套 值类型系统,主要是基本类型,如byte,int,boolean,char?double等,这些类型是基于值语 义;一套以Object类型为根的对象类型系统,这些类型可以定义为成员变量与成员方法,可 以有虚函数,基于引用语义,只允许使用new关键字在堆上开辟空间。java中的Any类型就是 整个对象类型系统的根--Object类型。 ???相比之下, 2.go语言的类型系统 类型系统是只一个语言的类型体系结构,正常情况下,一个典型的类型系统应该包含以 下基本内容: ????1).基础类型 ????2).复合类型 ????3).可以指向任意对象的类型(Any类型(如java里面的Object,?go里面的interface{})) ????4).值语义和引用语义 ????5).面向对象,即所有具备面向对象特征(比如成语方法)的类型 ????6).接口 main Integer?int Integer_Less(a?Integer,?b?Integer)?bool?{ ???a?<?b } (num?Integer)?Less?(b?Integer)?bool?{ ???num?<?b } main()??{ ???a?Integer?=?a.Less()?{ ??????fmt.Println(a,?) ???} ???Integer_Less(,?)?{ ??????fmt.Println() ???} } ????正常来说,go语言面向对象最为直观,也无需额外内存消耗,如果要求对象以指针传递 的话会有额外开销,因为对象本身有时很小(比如4个字节),用指针传递并不划算。只有需要 修改值的时候,才会使用指针。 (a?*Integer)?Add?(b?Integer)??{ ???*a?+=?b?} 添加方法完整案列: main Integer?int Integer_Less(a?Integer,?b?Integer)?bool?{ ???a?<?b } (num?Integer)?Less?(b?Integer)?bool?{ ???num?<?b } (a?*Integer)?Add?(b?Integer)??Integer?{ ???*a?+=?b?*a } (a?Integer)?AddOne?(b?Integer)??{ ???a?+=?b?fmt.Println(a) } main()??{ ???a?Integer?=?a.Less()?{ ??????fmt.Println(a,?) ???} ???Integer_Less(,?)?{ ??????fmt.Println() ???} ???fmt.Println(a.Add()) ???a.AddOne() } —- 编译者/作者:木姜子科技 玩币族申明:玩币族作为开放的资讯翻译/分享平台,所提供的所有资讯仅代表作者个人观点,与玩币族平台立场无关,且不构成任何投资理财建议。文章版权归原作者所有。 |
go语言面向对象编程之类型系统(添加方法)
2021-07-02 木姜子科技 来源:区块链网络
LOADING...
相关阅读:
- 为防止风险资产流入,火币OTC限时限额提币。冻卡潮愈演愈烈,冻卡类2021-07-02
- IPFS#Filecoin最新消息解读2021-07-01
- IPFS星际文件传输系统下Filecoin分布式存储网络主网V13升级2021-07-01
- DBX数字生态系统应用平台提供多元化服务2021-07-01
- Xcapit 在其投资钱包上集成 RIF 代币2021-07-01