封装(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) }
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)