当前位置:首页 > 科技  > 软件

Go语言中的面向对象编程(OOP)

来源: 责编: 时间:2024-01-08 09:15:37 284观看
导读在Go语言中,虽然没有像面向对象语言那样的类,但通过结构体类型和方法,仍然支持部分面向对象编程(OOP)的概念。封装(Encapsulation)封装是一种将一个对象的实现细节隐藏起来,使其对其他对象不可见的做法,这样可以实现解耦。例如

在Go语言中,虽然没有像面向对象语言那样的类,但通过结构体类型和方法,仍然支持部分面向对象编程(OOP)的概念。C3g28资讯网——每日最新资讯28at.com

封装(Encapsulation)

封装是一种将一个对象的实现细节隐藏起来,使其对其他对象不可见的做法,这样可以实现解耦。C3g28资讯网——每日最新资讯28at.com

例如,考虑以下结构体:C3g28资讯网——每日最新资讯28at.com

type Student struct{  name string  rollNo uint64}

其中的name和rollNo字段是私有的,因为它们以小写字母开头。为了提供公共访问,可以为这些字段定义对应的getter和setter方法。C3g28资讯网——每日最新资讯28at.com

func (s *Student) GetName() string {  return s.name}func (s *Student) SetName(name string) {  s.name = name}func (s *Student) GetRollNo() uint64 {  return s.rollNo}func (s *Student) SetRollNo(roll uint64) {  s.rollNo = roll}

现在,程序的其他部分也可以创建Student结构体的对象,并通过公共的getter和setter方法访问name和rollNo,从而实现了封装。C3g28资讯网——每日最新资讯28at.com

抽象(Abstraction)

数据抽象是一种设计模式,其中数据仅对语义相关的函数可见,以防止误用。数据抽象的成功导致在面向对象和纯函数式编程中频繁地将数据隐藏作为设计原则。C3g28资讯网——每日最新资讯28at.com

在Go语言中,可以通过接口实现抽象。接口定义了一组必须实现的方法,以满足接口的要求。C3g28资讯网——每日最新资讯28at.com

例如,考虑以下接口:C3g28资讯网——每日最新资讯28at.com

type iStudent interface{  calcPercentage() float64}

该接口定义了一个名为calcPercentage()的方法,用于计算学生的百分比。C3g28资讯网——每日最新资讯28at.com

继承(Inheritance)

在Go语言中,不支持传统意义上的继承。相反,Go使用组合来实现类似的功能。一个结构体可以嵌入另一个结构体,从而继承其字段和方法。C3g28资讯网——每日最新资讯28at.com

例如,考虑以下结构体:C3g28资讯网——每日最新资讯28at.com

type Person struct { name string age  uint64}type Student struct { Person studentID uint64}

在这里,Student结构体嵌入了Person结构体,这意味着它继承了Person的name字段。Student结构体还有自己的studentID字段。现在,任何对Person操作的方法也可以对Student操作,因为Student是一个带有额外字段的Person。C3g28资讯网——每日最新资讯28at.com

多态(Polymorphism)

多态是指调用代码可以独立于所支持层次结构中的类(父类或其子类)而运行的情况。C3g28资讯网——每日最新资讯28at.com

在Go语言中,可以通过使用接口来实现多态。由于Go是一种静态类型的语言,变量的类型必须在编译时已知。然而,通过使用接口,可以编写可以在满足相同接口要求的不同类型上操作的代码,而无需在编译时知道其具体类型。C3g28资讯网——每日最新资讯28at.com

例如,考虑以下代码:C3g28资讯网——每日最新资讯28at.com

func PrintStudentDetails(s *Student) {  fmt.Println("Student Name:", s.GetName())  fmt.Println("Student Age:", s.GetAge())  fmt.Println("Percentage",s.CalcPercentage())}

现在,我们可以将任何实现了PrintStudentDetails()方法的类型作为参数调用该函数,比如Student类型,它会显示该学生的详细信息。这就是多态的实现。C3g28资讯网——每日最新资讯28at.com

完整的面向对象编程在Go中的示例:C3g28资讯网——每日最新资讯28at.com

package mainimport "fmt"type Shape interface { Area() float64}type Triangle struct { Base, Height float64}func (t Triangle) Area() float64 { return 0.5 * t.Base * t.Height}type Square struct { Side float64}func (s Square) Area() float64 { return s.Side * s.Side}type Rectangle struct { Length, Breadth float64}func (r Rectangle) Area() float64 { return r.Length * r.Breadth}func printArea(s Shape) { fmt.Println("Area of shape is : ", s.Area())}func main() { t := Triangle{Base: 10, Height: 20} printArea(t)    //Area of shape is :  100 s := Square{Side: 20} printArea(s)    //Area of shape is :  400 r := Rectangle{Length: 20, Breadth: 10} printArea(r)    //Area of shape is :  200}

本文链接:http://www.28at.com/showinfo-26-57876-0.htmlGo语言中的面向对象编程(OOP)

声明:本网页内容旨在传播知识,若有侵权等问题请及时与本网联系,我们将在第一时间删除处理。邮件:2376512515@qq.com

上一篇: Istio多集群实践,你都学会了吗?

下一篇: Go 语言中 defer 使用时有哪些陷阱?

标签:
  • 热门焦点
  • 28个SpringBoot项目中常用注解,日常开发、求职面试不再懵圈

    前言在使用SpringBoot开发中或者在求职面试中都会使用到很多注解或者问到注解相关的知识。本文主要对一些常用的注解进行了总结,同时也会举出具体例子,供大家学习和参考。注解
  • Golang 中的 io 包详解:组合接口

    io.ReadWriter// ReadWriter is the interface that groups the basic Read and Write methods.type ReadWriter interface { Reader Writer}是对Reader和Writer接口的组合,
  • 一文掌握 Golang 模糊测试(Fuzz Testing)

    模糊测试(Fuzz Testing)模糊测试(Fuzz Testing)是通过向目标系统提供非预期的输入并监视异常结果来发现软件漏洞的方法。可以用来发现应用程序、操作系统和网络协议等中的漏洞或
  • Temu起诉SHEIN,跨境电商战事升级

    来源 | 伯虎财经(bohuFN)作者 | 陈平安日前据外媒报道,拼多多旗下跨境电商平台Temu正对竞争对手SHEIN提起新诉讼,诉状称Shein“利用市场支配力量强迫服装厂商与之签订独家
  • 10天营收超1亿美元,《星铁》比《原神》差在哪?

    来源:伯虎财经作者:陈平安即便你没玩过《原神》,你一定听说过的它的大名。恨它的人把《原神》开服那天称作是中国游戏史上最黑暗的一天,有粉丝因为索尼在PS平台上线《原神》,怒而
  • 自律,给不了Keep自由!

    来源 | 互联网品牌官作者 | 李大为编排 | 又耳 审核 | 谷晓辉自律能不能给用户自由暂时不好说,但大概率不能给Keep自由。近日,全球最大的在线健身平台Keep正式登陆港交所,努力
  • ESG的面子与里子

    来源 | 光子星球撰文 | 吴坤谚编辑 | 吴先之三伏大幕拉起,各地高温预警不绝,但处于厄尔尼诺大“烤”之下的除了众生,还有各大企业发布的ESG报告。ESG是“环境保
  • 8月见!小米MIX Fold 3获得3C认证:支持67W快充

    这段时间以来,包括三星、一加、荣耀等等有不少品牌旗下的最新折叠屏旗舰都得到了不少爆料,而小米新一代折叠屏旗舰——小米MIX Fold 3此前也屡屡被传
  • 联想的ThinkBook Plus下一版曝光,键盘旁边塞个平板

    ThinkBook Plus 是联想的一个特殊笔记本类别,它在封面放入了一块墨水屏,也给人留下了较为深刻的印象。据有人爆料,联想的下一款 ThinkBook Plus 可能更特殊,它
Top