yyz notes yyz notes
首页
  • RBAC权限设计
  • 架构图标设计
  • 账号体系
  • python基础
  • python高级
  • python模块
  • python设计模式
  • python数据结构与算法
  • django
  • django-DRF
  • flask
  • 直接设计开源pip包
  • 直接设计开源项目
  • python示例题/脚本
  • python面试题
  • golang基础
  • golang高级
  • golang常用组件
  • gin框架
  • es6
  • javascript
  • react
  • vue
  • TypeScript
  • mysql
  • redis
  • minio
  • elasticsearch
  • mongodb
  • 消息队列
  • 自动化测试
  • 操作系统

    • linux
    • windows
  • nginx
  • docker
  • k8s
  • git
  • ldap
  • 学习
  • 面试
  • 心情杂货
  • 实用技巧
  • 友情链接
关于
收藏
  • 分类
  • 标签
  • 归档
GitHub (opens new window)

益章

可乐鸡翅
首页
  • RBAC权限设计
  • 架构图标设计
  • 账号体系
  • python基础
  • python高级
  • python模块
  • python设计模式
  • python数据结构与算法
  • django
  • django-DRF
  • flask
  • 直接设计开源pip包
  • 直接设计开源项目
  • python示例题/脚本
  • python面试题
  • golang基础
  • golang高级
  • golang常用组件
  • gin框架
  • es6
  • javascript
  • react
  • vue
  • TypeScript
  • mysql
  • redis
  • minio
  • elasticsearch
  • mongodb
  • 消息队列
  • 自动化测试
  • 操作系统

    • linux
    • windows
  • nginx
  • docker
  • k8s
  • git
  • ldap
  • 学习
  • 面试
  • 心情杂货
  • 实用技巧
  • 友情链接
关于
收藏
  • 分类
  • 标签
  • 归档
GitHub (opens new window)
  • golang基础

    • 初识golang

    • golang基础语法

    • golang流程控制

    • golang函数

    • golang内置函数

    • golang包

    • golang错误异常处理

    • golang面向对象(结构体)

      • 结构体基础
      • 结构体中的字段
      • 结构体中的方法
      • 方法的注意事项
      • 封装
        • 1. 封装的介绍
          • 什么是封装:
          • 封装的好处:
          • Golang中如何实现封装:
          • 实现方式二:
      • 继承
      • 接口 interface
      • 多态
      • 断言
    • golang文件处理

    • golang并发编程简介

    • golang并发编程-协程

    • golang网络编程

    • 反射 reflect

  • golang高级

  • 常用组件

  • gin

  • golang
  • golang基础
  • golang面向对象(结构体)
YiZhang-You
2023-05-24
目录

封装

# 1. 封装的介绍

# 什么是封装:

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

# 封装的好处:

  1. 隐藏实现细节

  2. 提可以对数据进行验证,保证安全合理

# Golang中如何实现封装:

  1. 建议将结构体、字段(属性)的首字母小写(其它包不能使用,类似private,实际开发不小写也可能,因为封装没有那么严格)

  2. 给结构体所在包提供一个工厂模式的函数,首字母大写(类似一个构造函数)

  3. 提供一个首字母大写的Set方法(类似其它语言的public),用于对属性判断并赋值 func (var 结构体类型名)SetXxx(参数列表){ //加入数据验证的业务逻辑 var.Age =参数 }

  4. 提供一个首字母大写的Get方法(类似其它语言的public),用于获取属性的值 func (var结构体类型名) GetXxx() (返回值列表){ return var.字段; }

package main

import "fmt"

// 定义结构体
type person struct {
	name string
	age  int
}

// 定义get方法
func (p person) getAge() {
	fmt.Println(p.age)
}

// 定义set方法
func (p *person) setAge(age int) {
	if age > 0 && age < 200 {
		(*p).age = age
	} else {
		fmt.Println("年纪输入有误", age)
	}
}

// NewPerson 定义工厂函数,外部访问结构体中的字段
func NewPerson(name string, age int) *person {
	return &person{name: name, age: age}
}

func main() {
	var p = new(person)
	(*p).setAge(2001)
	p.getAge()

	// 访问结构体
	var p1 = NewPerson("高起强", 18)
	fmt.Println(*p1)
}
/*
	年纪输入有误 2001
	0
	{高起强 18}
*/
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43

# 实现方式二:

编辑 (opens new window)
方法的注意事项
继承

← 方法的注意事项 继承→

最近更新
01
配置yun源
05-24
02
linux-配置python虚拟环境
05-24
03
linux文件目录管理
05-24
更多文章>
Theme by Vdoing | Copyright © 2023-2023 yizhang | MIT License
  • 跟随系统
  • 浅色模式
  • 深色模式
  • 阅读模式