当前位置: 首页 > 工具软件 > go-binance > 使用案例 >

go中封装基本使用

杨骏
2023-12-01

一 基本介绍

Golang 仍然有面向对象编程的继承、封装和多态的特性,只是实现的方式和其它 OOP 语言不一样。

二 封装介绍

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

三  封装的理解和好处

1 隐藏实现细节。

2 可以对数据进行验证,保证安全合理(例如 Age 不能超过200岁)。

四 如何体现封装

1 对结构体中的属性进行封装。

2 通过方法、包实现封装。

五 封装的实现步骤

1 将结构体、字段(属性)的首字母小写(不能导出了,其它包不能使用,类似 private)。

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

3 提供一个首字母大写的 Set 方法(类似其它语言的 public),用于对属性判断并赋值。

func (var 结构体类型名) SetXxx(参数列表) (返回值列表) {

    // 加入数据验证的业务逻辑

    var.字段 = 参数

}

4 提供一个首字母大写的 Get 方法(类似其它语言的 public),用于获取属性的值。

func (var 结构体类型名) GetXxx() {

    return var.age;

}

5 Golang 开发并没有特别强调封装,这点并不像 Java,不用总是用 java 的语法特性来看待 Golang, Golang 本身对面向对象的特性做了简化。

六 实战

1 需求

编写一个程序(person.go),不能随便查看人的年龄, 工资等隐私,并对输入的年龄进行合理的验证。

2 代码

model/person.go

package model

import "fmt"

type person struct {
   Name string
   age  int // 其它包不能直接访问
   sal  float64
}

// 写一个工厂模式的函数,相当于构造函数
func NewPerson(name string) *person {
   return &person{
      Name: name,
   }
}

// 为了访问 age 和 sal ,编写一对SetXxx的方法和GetXxx的方法
func (p *person) SetAge(age int) {
   if age > 0 && age < 150 {
      p.age = age
   } else {
      fmt.Println("年龄范围不正确")
   }
}

func (p *person) GetAge() int {
   return p.age
}

func (p *person) SetSal(sal float64) {
   if sal >= 3000 && sal <= 30000 {
      p.sal = sal
   } else {
      fmt.Println("薪水范围不正确")
   }
}

func (p *person) GetSal() float64 {
   return p.sal
}

main/main.go

package main

import (
   "fmt"
   "chapter11/encapsulate/model"
)

func main() {
   p := model.NewPerson("smith")
   p.SetAge(18)
   p.SetSal(5000)
   fmt.Println(p)
   fmt.Println(p.Name, " age =", p.GetAge(), " sal = ", p.GetSal())
}

七 测试

&{smith 18 5000}
smith  age = 18  sal =  5000

 

 类似资料: