go面向对象编程三大特性,封装、继承和多态

devtools/2025/3/26 0:08:15/

1.简介

go具有面向对象编程的封装继承多态的特性,只是实现的方式和其它OOP语言不一样,下面看下go的三大特性是如何实现的。

2.封装

2.1基本介绍

封装就是把抽象出的字段和对字段的操作封装在一起,数据被保护在内部,程序的其它包只能通过被授权的操作(方法),才能对字段进行操作。

优点:

  • 隐藏细节。
  • 可以对数据进行验证,保证安全合理。

2.2封装的实现步骤

  1. 将结构体、字段(属性)的首字母小写(不能导出了,其他包不能使用)。
  2. 给结构体所在包提供一个工厂模式的函数,首字母大写。类似一个构造函数。
  3. 提供一个首字母大写Set方法(类似java中的public),用于堆属性判断并赋值。
  4. 提供一个首字母大写的Get方法,用于获取属性的值。

2.3案例 

2.3.1案例一

需求:封装一个小学生程序,不能随便查看学生的年龄、姓名和性别。

设计:model包main包调用学生对象

model包里面的student.go

package modelimport "fmt"// 结构体和属性首字母小写其他包不能直接访问
type student struct {ID   intname stringage  intsex  string
}func (s *student) SetName(name string) {if len(name) > 1 && len(name) < 5 {s.name = name} else {fmt.Println("请输入正确的姓名!")}}
func (s *student) GetName() string {return s.name
}
func (s *student) SetAge(age int) {if age > 6 && age < 12 {s.age = age} else {fmt.Println("年龄不在指定范围")}
}
func (s *student) GetAge() int {return s.age
}
func (s *student) SetSex(sex string) {if sex == "男" || sex == "女" {s.sex = sex} else {fmt.Println("请输入正确的性别!")}
}
func (s *student) GetSex() string {return s.sex
}// 定义一个工厂模式函数
func NewStudent(id int) *student {return &student{ID: id,}
}

main.go

package mainimport ("demo

http://www.ppmy.cn/devtools/170668.html

相关文章

PostgreSQL_数据使用与日数据分享

目录 前置&#xff1a; 1 使用 1.1 获取前复权因子 1.2 查询股票的纵向数据 1.3 查询股票的横向数据 2 日数据分享&#xff08;截止至&#xff1a;2025-03-21&#xff09; 总结 前置&#xff1a; 本博文是一个系列。在本人“数据库专栏”-》“PostgreSQL_”开头的博文。…

SOFABoot-09-模块隔离

前言 大家好&#xff0c;我是老马。 sofastack 其实出来很久了&#xff0c;第一次应该是在 2022 年左右开始关注&#xff0c;但是一直没有深入研究。 最近想学习一下 SOFA 对于生态的设计和思考。 sofaboot 系列 SOFABoot-00-sofaboot 概览 SOFABoot-01-蚂蚁金服开源的 s…

麦谷科技-前端面经

base&#xff1a;车联网&#xff0c;uniapp小程序。 面试时间&#xff1a;2025-03月&#xff08;应届&#xff09; 投递岗位&#xff1a;前端&#xff08;转正实习&#xff09; 面试流程比较短&#xff0c;可能是因为经历不匹配或者第一题答的不好Tvt 时间&#xff1a;上午约一…

存算分离是否真的有必要?从架构之争到 Doris 实战解析

引言&#xff1a;一场关于 “存与算” 的N年辩论 在数据库与大数据领域&#xff0c;“存算一体” 与 “存算分离” 的架构之争从未停歇。有人质疑&#xff1a;“存算分离真的有必要吗&#xff1f;本地盘性能难道不够&#xff1f;” 答案并非非黑即白 —— 技术选型的关键&…

PyTorch 深度学习实战(18):分布式强化学习与 IMPALA 算法

在上一篇文章中&#xff0c;我们探讨了离线强化学习与 CQL 算法&#xff0c;展示了如何利用静态数据集训练安全的强化学习策略。本文将深入 分布式强化学习 领域&#xff0c;介绍 IMPALA&#xff08;Importance Weighted Actor-Learner Architecture&#xff09; 算法&#xff…

Flutter TextField 从入门到精通:掌握输入框的完整指南

目录 1. 引言 2. TextField 的基本用法 3. 主要属性 4. 自定义 TextField 样式 4.1 自定义边框与提示文本 4.2 增加前缀/后缀图标 4.3 只允许输入数字 4.4 表单验证系统 4.5 动态样式修改 4.6 防抖搜索&#xff08;Debounce&#xff09; 5. 结论 相关推荐 1. 引言…

Windows部署deepseek R1训练数据后通过AnythingLLM当服务器创建问答页面

如果要了解Windows部署Ollama 、deepseek R1请看我上一篇内容。 这是接上一篇的。 AnythingLLM是一个开源的全栈AI客户端&#xff0c;支持本地部署和API集成。它可以将任何文档或内容转化为上下文&#xff0c;供各种语言模型&#xff08;LLM&#xff09;在对话中使用。以下是…

Mysql深分页的解决方案

在数据量非常大的情况下&#xff0c;深分页查询则变得很常见&#xff0c;深分页会导致MySQL需要扫描大量前面的数据&#xff0c;从而效率低下。例如&#xff0c;使用LIMIT 100000, 10时&#xff0c;MySQL需要扫描前100000条数据才能找到第10000页的数据。 在MySQL中解决深分页…