2.14 Go之封装简介以及实现细节

2.14 Go之封装简介以及实现细节

Go语言的封装概念

Go语言的封装和java类似,就是把对结构体字段操作的方法和结构体封装在一个.go文件中。数据被保护在内部,程序的其它包只能通过被授权的方法,才能对字段进行操作。

封装的好处:

  • 隐藏实现细节;

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

代码示例

新建员工结构体:

/* 新建一个员工数据结构体 */
type person struct {
   Name string
   age int // 其他包不可直接访问
   salary float64
}

提供结构体构造函数:

/* 工厂模式函数,相当于构造函数,返回结构的指针对象 */
func NewPerson(name string) *person {
   return &person{
       Name: name,
  }
}

提供属性的getset方法:

/* 给person结构体的属性提供get和set方法 */
func (p *person) SetAge(age int) error {
   if age > 0 && age < 60 {
       p.age = age
  }else {
       return errors.New("年龄有误!")
  }
   return nil
}

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

func (p *person) SetSalary(sal float64) error {
   if sal > 3000 {
       p.salary = sal
  }else {
       return errors.New("薪资有误!")
  }
   return nil
}

func (p *person) GetSalary() float64 {
   return p.salary
}

完整代码:

package model

import "errors"

/* 新建一个员工数据结构体 */
type person struct {
   Name string
   age int // 其他包不可直接访问
   salary float64
}

/* 工厂模式函数,相当于构造函数,返回结构的指针对象 */
func NewPerson(name string) *person {
   return &person{
       Name: name,
  }
}

/* 给person结构体的属性提供get和set方法 */
func (p *person) SetAge(age int) error {
   if age > 0 && age < 60 {
       p.age = age
  }else {
       return errors.New("年龄有误!")
  }
   return nil
}

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

func (p *person) SetSalary(sal float64) error {
   if sal > 3000 {
       p.salary = sal
  }else {
       return errors.New("薪资有误!")
  }
   return nil
}

func (p *person) GetSalary() float64 {
   return p.salary
}

在main目录下进行调用

package main

import (
   "GoPracticePakage/Practice_Pakage/model"
   "fmt"
)

func main() {
   // 新建model对象
   p := model.NewPerson("Lucifer")
   p.SetAge(22)
   p.SetSalary(12000)
   fmt.Println(p)
   fmt.Println(p.Name, "年龄=", p.GetAge(), "薪资=", p.GetSalary())
}

 

上一篇:2.11 Go接口内部实现


下一篇:phpcms v9 根据日期调用全站文章url