当前位置: 首页 > news >正文

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

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 model

import "fmt"

// 结构体和属性首字母小写其他包不能直接访问
type student struct {
	ID   int
	name string
	age  int
	sex  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 main

import (
	"demo

相关文章:

  • leetcode98-验证二叉搜索树
  • 【2025】基于Springboot + vue实现的毕业设计选题系统
  • Transaction rolled back because it has been marked as rollback-only问题解决
  • windows克隆项目找不到,修改git bash中存储的账号密码
  • 如何查看安卓版本号的方法(例如查看是13、12、11、10...)
  • 齿轮热处理学习笔记分享
  • 【MySQL】基本查询(表的增删查改+聚合函数)
  • MySQL 进阶学习文档
  • 工作记录 2017-02-08
  • 区块链交易签名相关知识总结
  • 经典面试题:C/C++中static关键字的三大核心作用与实战应用
  • 详解过程内聚、时间内聚、顺序内聚、逻辑内聚
  • OpenCV旋转估计(1)用于估计图像间仿射变换关系的类cv::detail::AffineBasedEstimator
  • 8.2《二力平衡》
  • 好看的网络安全登录页面 vue http网络安全
  • 重要重要!!改进求取Fisher矩阵的方法: 加权正则化Fisher矩阵
  • 蓝桥备考--必考题型--广度优先搜索bfs
  • 带旋转的目标标注工具-X-AnyLabeling
  • 【pytest框架源码分析五】pytest插件的注册流程
  • 基于Netty实现高性能HTTP服务的架构解析
  • 万达电影去年净利润亏损约9.4亿元,计划未来三年内新增25块IMAX银幕
  • 4月人民币对美元即期汇率微跌,今年以来升值0.48%
  • 蔡澜回应“入ICU观察”称未至于病危,助理:只是老毛病
  • 昂立教育:去年减亏1.39亿元,今年以“利润持续增长”为核心目标
  • 王毅:携手做世界和平与发展事业的中流砥柱
  • 释新闻|西葡大停电为何规模大、恢复慢?可再生能源是罪魁祸首?