golang中没有多态的概念,可以使用interface 进行实现,
需求: golang满足不同评测的调用
创建基础评测interface
type BaseScale interface {
GetQuestion() []string //获取题目
CalcResult(scoreInfo []string) string //计算结果
GetReport(resultInfo string) string //根据结果生成报告
}
然后对不同的对象创建不同的结构体
type ChildScale struct {
}
func (e *ChildScale) GetQuestion() []string {
return "get question"
}
func (e *ChildScale) CalcResult(scoreInfo []string) string {
return "result"
}
func (e *ChildScale) GetReport(resultInfo string) string {
return "report"
}
type ChildScale2 struct {
}
func (e *ChildScale2) GetQuestion() []string {
return "get question"
}
func (e *ChildScale2) CalcResult(scoreInfo []string) string {
return "result"
}
func (e *ChildScale2) GetReport(resultInfo string) string {
return "report"
}
创建一个工厂函数,根据不同名称进行调用不同的对象
func Factry(name string) BaseScale {
switch name {
case "childscale":
return &ChildScale{}
case "childscale2":
return &ChildScale2{}
default:
return nil
}
}
使用时:
childScale := BaseScale.Factry("childscale")
// 调用childScale对象的函数
result := childScale.CalcResult("test")