go学习 --- 封装

go学习 --- 封装,第1张

go学习 --- 封装 一、封装

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

二、实现封装

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

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

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

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

三、入门练习
package person

import (
	"fmt"
)

//定义一个结构体
type person struct {
	Name string
	age int
	sal float64
}
//编写工厂模式函数
func NewPerson(name string) *person  {
	return &person{
		Name: name,
	}
}
//编写get和set方法
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 > 0 {
		p.sal = sal
	}else {
		fmt.Println("请输入正确的薪水")
	}
}
func (p *person) GetSal() float64 {
	return p.sal
}
package main

import (
	"fmt"
	"go_code/project01/main/person"
)
func main() {
	newPerson := person.NewPerson("老王")
	newPerson.SetAge(10)
	newPerson.SetSal(2000)
	fmt.Println("年龄:",newPerson.GetAge(),"薪水:",newPerson.GetSal())
}

 练习二

package account

import (
	"fmt"
)

//定义一个结构体
type account struct {
	accountNo string
	pwd string
	balance float64
}
//编写一个工厂模式
func NewAccount(accountNo string, pwd string, balance float64) *account {
	if len(accountNo) < 6 || len(accountNo) > 10  {
		fmt.Println("账户的长度不对")
		return nil
	}
	if len(pwd) != 6  {
		fmt.Println("账户密码格式不正确")
		return  nil
	}
	if balance < 20 {
		fmt.Println("存入余额不足")
		return nil
	}
	a := account{
		accountNo: accountNo,
		pwd:       pwd,
		balance:   balance,
	}
	return &a
}
func (p *account) SetAccountNo(accountNo string)  {
	if len(accountNo) < 6 || len(accountNo) > 10  {
		fmt.Println("账户的长度不对")
		return
	} else {
		p.accountNo = accountNo
	}
}
func (p *account) SetPwd(pwd string)  {
	if len(pwd) != 6  {
		fmt.Println("账户密码格式不正确")
		return
	}else {
		p.pwd = pwd
	}
}
func (p *account) SetBalance(balance float64)  {
	if balance < 20 {
		fmt.Println("存入余额不足")
		return
	}else {
		p.balance = balance
	}
}
//存款
func (account *account) Deposite(money float64,pwd string)  {
	//判断密码是否正确
	if pwd != account.pwd {
		fmt.Println("请输入正确的密码")
		return
	}
	//判断输入金额是否合理
	if money <= 0 {
		fmt.Println("请输入正确的金额")
		return
	}
	account.balance += money
	fmt.Println("存款成功")
}
//取款
func (account *account) WithDraw(money float64,pwd string)  {
	//判断密码是否正确
	if pwd != account.pwd {
		fmt.Println("请输入正确的密码")
		return
	}
	//判断输入金额是否合理
	if money <= 0 || money > account.balance{
		fmt.Println("请输入正确的金额")
		return
	}
	account.balance -= money
	fmt.Println("取款成功")
}
//查询余额
func (account *account) Query(pwd string)  {
	//判断密码是否正确
	if pwd != account.pwd {
		fmt.Println("请输入正确的密码")
		return
	}
	fmt.Println("账户余额为:",account.balance)
}
package main

import (
	"fmt"
	"go_code/project01/main/account"
)
func main() {

	newAccount := account.NewAccount("老王", "666666", 20)
	if newAccount != nil {
		fmt.Println("创建成功",newAccount)
	} else {
		fmt.Println("创建失败")
	}
	newAccount.SetAccountNo("5555555555555555")
	fmt.Println(newAccount)
}

欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/zaji/5692933.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-12-17
下一篇 2022-12-17

发表评论

登录后才能评论

评论列表(0条)

保存