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

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

时间:2024-03-14 19:29:05浏览次数:25  
标签:name Area float64 OOP func Student Go 面向对象编程

在Go语言中,虽然没有像面向对象语言那样的类,但通过结构体类型和方法,仍然支持部分面向对象编程(OOP)的概念。

封装(Encapsulation)

封装是一种将一个对象的实现细节隐藏起来,使其对其他对象不可见的做法,这样可以实现解耦。
例如,考虑以下结构体:

type Student struct{
  name string
  rollNo uint64
}

其中的name和rollNo字段是私有的,因为它们以小写字母开头。为了提供公共访问,可以为这些字段定义对应的getter和setter方法。

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,从而实现了封装。

抽象(Abstraction)

数据抽象是一种设计模式,其中数据仅对语义相关的函数可见,以防止误用。数据抽象的成功导致在面向对象和纯函数式编程中频繁地将数据隐藏作为设计原则。
在Go语言中,可以通过接口实现抽象。接口定义了一组必须实现的方法,以满足接口的要求。
例如,考虑以下接口:

type iStudent interface{
  calcPercentage() float64
}

该接口定义了一个名为calcPercentage()的方法,用于计算学生的百分比。

继承(Inheritance)

在Go语言中,不支持传统意义上的继承。相反,Go使用组合来实现类似的功能。一个结构体可以嵌入另一个结构体,从而继承其字段和方法。
例如,考虑以下结构体:

type Person struct {
 name string
 age  uint64
}

type Student struct {
 Person
 studentID uint64
}

在这里,Student结构体嵌入了Person结构体,这意味着它继承了Person的name字段。Student结构体还有自己的studentID字段。现在,任何对Person操作的方法也可以对Student操作,因为Student是一个带有额外字段的Person。

多态(Polymorphism)

多态是指调用代码可以独立于所支持层次结构中的类(父类或其子类)而运行的情况。
在Go语言中,可以通过使用接口来实现多态。由于Go是一种静态类型的语言,变量的类型必须在编译时已知。然而,通过使用接口,可以编写可以在满足相同接口要求的不同类型上操作的代码,而无需在编译时知道其具体类型。
例如,考虑以下代码:

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

现在,我们可以将任何实现了PrintStudentDetails()方法的类型作为参数调用该函数,比如Student类型,它会显示该学生的详细信息。这就是多态的实现。

完整的面向对象编程在Go中的示例:

package main

import "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
}

标签:name,Area,float64,OOP,func,Student,Go,面向对象编程
From: https://blog.csdn.net/ldxxxxll/article/details/136706904

相关文章

  • gorm使用事务并发情况下切有最大mysql连接数限制的情况下的BUG,踩坑了
    现象服务器pprof中的goroutines很多,无法释放,肯定是异常.代码//收到请求上个赛季个人秘境赛季排行func(this*MsgProc)MsgProc_PersonSecretLastRankReq(msg*protoMsg.PersonSecretLastRankReq){ global.GetSrvInst().GetThreadGo().Go(func(ctxcontext.Context)......
  • 操作Redis之go-redis
    目录一、go操作redis的选择二、redis安装1.windowd平台安装方案2.mac平台和linux平台安装方案3.redis应用三、快速使用1.快速连接2.字符串操作(1)方法(2)示例3.列表操作(1)方法(2)示例4.hash操作(1)方法(2)示例5.集合操作(1)方法(2)示例6.有序集合操作(1)方法(2)示例7.通用操作(1)方法(2)示例8.......
  • 操作Redis之redigo
    目录一、go操作redis的选择二、redigo快速使用1.快速链接三、redis操作四、连接池一、go操作redis的选择golang操作redis主要有两个库,go-redis和redigo。go-redis:star数更多,支持连接哨兵及集群模式的Redisredigo:star数少一些,操作更简单二、redigo快速使用安装:gog......
  • C++、Java 和 Go 是三种流行的编程语言,它们各有不同的特点和应用场景
    C++:面向对象和泛型编程:C++是一种多范式编程语言,支持面向对象编程(OOP)和泛型编程(GenericProgramming)。性能:C++是一种系统级编程语言,注重性能和内存管理。它提供了直接的内存访问和指针操作,使得程序员可以更精细地控制内存和计算资源。灵活性:C++允许程序员直接操作硬件,并提......
  • 使用docker搭建mongodb
    使用DockerCLI搭建MongoDB1.运行MongoDB容器首先,我们使用以下命令来启动一个MongoDB容器:dockerrun-itd--namemongodb_comm-v$PWD/data:/data/db-p27017:27017mongo:4.4--auth参数解释:-itd:这三个参数通常一起使用,i表示交互式模式,t分配一个伪......
  • django安装项目 app流程
    #django版本问题 1..x 2.x   3.x(直接忽略)1.x和2.x本身差距也不大 我们讲解主要以1.x为例会讲解2.x区别公司之前用的1.8慢慢过渡到了1.11版本有一些项目用的2.0#django安装pip3installdjango==1.11.11 在Python中设置里找jango不要直接安装需要选......
  • Hadoop大数据应用:Linux 部署 HDFS 分布式集群
    目录  一、实验1.环境2.Linux部署HDFS分布式集群3.Linux使用 HDFS文件系统二、问题1.ssh-copy-id报错2.如何禁用sshkey检测3.HDFS有哪些配置文件4.hadoop查看版本报错5.启动集群报错6.hadoop的启动和停止命令7.上传文件报错8.HDFS使用命令  ......
  • 基于Django(python+sql)的校园二手交易系统设计与实现(完整程序+开题报告+论文)
    摘要        随着互联网的迅猛发展,校园内的二手交易市场也逐渐呈现出蓬勃的发展态势。学生们在校园生活中会产生大量的闲置物品,而其他学生也有可能需要这些物品。本论文研究了校园二手交易系统的需求分析、系统实现和测试三个部分,旨在提高校园二手交易系统的开发和测......
  • 探索谷歌的秘密花园:Google文件系统GFS之旅(Google File System)
    文章目录......
  • go实现gPRC服务
    go实现gRPC服务本文介绍如何使用go语言搭建简单的gRPC服务,内容比较基础,记录自己的踩坑过程。1.背景知识gRPC是一种高效的远程过程调用(RPC)框架,用于不同计算机之间的通信和远程服务调用。gRPC的目标是让客户端向调用本地方法一样调用其他机器上的服务端应用程序提供的方法,能够......