开发者学堂课程【Go 语言核心编程 - 面向对象、文件、单元测试、反射、TCP 编程:封装课堂练习讲解】学习笔记,与课程紧密联系,让用户快速学习知识。
课程地址:https://developer.aliyun.com/learning/course/626/detail/9690
封装课堂练习讲解
内容简介
一、课堂习题
二、代码实现
三、执行结果
一、 课堂习题
课堂习题要求:创建程序,在 model 包中定义 Account 结构体:在main 函数中体会 Golang 的封装性。
① Account 结构体要求具有字段:账号(长度在6-10之间)、余额(必须>20)、密码(必须是六位)
②通过 SetXxx 的方法给 Account 的字段赋值,通过 GetXxx 方法获取字段的值。(自己独立完成)
③在 main 函数中测试
二、 代码实现
首先打开 VSCode ,新建一个文件夹称为 encapexercise (封装的练习题),在其中再建两个文件夹,一个称为 main ,另一个称为 model 。在 model 中新建一个文件称为 account.go ,输入以下代码:
package model
import (
“fmt”
)
//定义一个结构体account
type account struct {
accountNo string
pwd string
balance float64
}
//工厂模式的函数-构造函数
func NewAccount(account 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
}
return &account{
accountNo : accountNo,
pwd : pwd,
balance : balance,
}
}
//方法
//1.存款
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(“你的账号=%v 余额=%v \n”, account.accountNo,account.balance)
}
再打开 main 包,新建一个文件称为 main.go ,用来测试以上代码是否能用,在 main.go 中输入以下代码:
package main
import (
“fmt”
“go_code/chapter11/encapexercise/model”
)
func main() {
//创建一个account变量
account := model.NewAccount(“jzh11111”,”999999”,40)
if account != nil {
fmt.Println(“创建成功=”,account)
} else {
fmt.Println(“创建失败”)
}
}
三、执行结果
1. 代码执行结果
D:\goproject\src\go_code>cd chapter11
D:\goproject\src\go_code\chapter11>dir
驱动器 D 中的卷是 新加卷
卷的序列号是 D2AD-BC9F
D:\goproject\src\go_code\chapter11 的目录
06 15:16
.
06 15:16
..
06 11:41
abstract
06 15:16
encapexercise
06 14:29
encapsulate
0 个文件 0个字节
5 个目录 33,792,491,520 可用字节
D:\goproject\src\go_code\chapter11>cd encapexercise
D:\goproject\src\go_code\chapter11\encapexercise>go run main.go
CreatcFile main.go: The syston cannot find the file specified.
D:\goproject\src\go_code\chapter11\encapexercise>cd main
D:\goproject\src\go_code\chapter11\encapexercise\main>go run main.go
创建成功= &
2. 测试代码
①现将上文 main/main.go 包中的代码修改账号一处,将“jzh11111”修改为”jzh1”,用来检测是否会显示创建失败,执行结果为:
D:\goproject\src\go_code\chapter11\encapexercise\main>go run main.go
账号的长度不对...
创建失败
②再将上文 main/main.go 包中的代码修改密码一处,将”999999“修改为”000”,执行结果为:
D:\goproject\src\go_code\chapter11\encapexercise\main>go run main.go
密码的长度不对...
创建失败
3. 代码说明
说明:在老师的代码基础上增加如下功能:
通过 SetXxx 的方法给 Account 的字段赋值,通过 GetXxx 方法获取字段的值。(自己独立完成)
在 main 函数中测试