2022-5-12 实习Day34

1、冒烟测试-贸金系统-退汇业务申报问题,提交时无需申报 –2小时 100%
2、汇出汇款,收款人信息非强制必输,申报信息校验要求必输入。排查后收款人信息需要输入完全–2小时 100%
3、bugfix中费用管理交易账务信息扣费币种下拉为空已恢复。–2小时 100%

Golang编程学习(part 29)

1、工厂模式

Golang的结构体没有构造函数,通常可以使用工厂模式来解决这个问题

1
2
3
4
package model
type Student struct {
Name string
}

看上面的代码,这里的Student的首字母S是大写的,如果我们想在其他包创建Student实例(比如main包),引入model包后,就可以直接创建Student结构体变量。但是问题来了,如果首字母是小写的,比如是 type student struct{…}就不行了,怎么办——>工厂模式来解决

2、工厂模式来解决问题

① 使用工厂模式实现跨包创建结构体实例(变量)的案例:如果model包的结构体变量首字母大写,引入后直接使用,没有问题。但是首字母小写的结构体不行
1
2
3
4
5
6
7
8
9
10
package model
type Student struct {
Name string
Score float64
}

type person struct {
name string
score float64
}
1
2
3
4
5
6
7
8
9
10
11
12
package main
import (
"Test1/model"
"fmt"
)

func main() {
var stu = model.Student{"tom", 78}
fmt.Println(stu)

// model.person{} 直接报错,编译过不去
}
② 使用工厂模式解决上面的问题
1
2
3
4
5
6
7
8
9
10
11
12
13
14
package model
type student struct {
name string
score float64
}

// 因为student结构体首字母是小写的,因此是只能在model中使用
// 我们通过工厂模式来解决
func NewStudent(n string, s float64) *student {
return &student{
Name : n,
Score : s,
}
}
③ 思考题:如果model包的student的结构体字段Score改成score,我们还能正常访问吗?又应该如何解决这个问题呢
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
type student struct {
Name string
score float64
}

// 因为student结构体首字母是小写,因此是只能在model使用
// 我们通过工厂模式来解决
func NewStudent(n string, s float64) *student {
return &student {
Name : n,
score : s,
}
}

// 如果score字段首字母小写,则在其他包不可以直接访问该字段,我们可以提供一个方法
func (s *student) GetScore() float64 {
return (*s).score
}
1
2
3
4
5
6
7
8
9
10
11
12
13
package main

import (
"Test1/model"
"fmt"
)

func main() {
student := model.NewStudent("张三", 25)
// student.score; 根本访问不了
score := student.GetScore()
fmt.Println(score) // 25
}