go 面向对象学习总结

package main

import "fmt"

const (
	Choice = iota
	Blank
)

type IQuestion interface{
	GetQuestionType() int
	GetQuestionContent() string
	AddQuestionContentPrefix(prefix string)
}

type BaseQuestion struct {
	QuestionId	int
	QuestionContent string
	QuestionType int
}

type ChoiceQuestion struct{
	BaseQuestion
	Options []string
}

type BlankQuestion struct{
	BaseQuestion
	Blank string
}

func (base *BaseQuestion) GetQuestionType() int{
	return base.QuestionType
}

func (base *BaseQuestion) GetQuestionContent() string{
	return base.QuestionContent
}

func (base *BaseQuestion) AddQuestionContentPrefix(prefix string)  {
	base.QuestionContent  = prefix + base.QuestionContent
}
var ChoiceQuestionMap  = make(map[int]ChoiceQuestion)
var BlankQuestionMap = make(map[int]BlankQuestion)
func initial(){

	var choiceQuestion ChoiceQuestion
	choiceQuestion.Options = []string{"A:0","B:1","C:2","D:3"}
	choiceQuestion.QuestionId = 1001
	choiceQuestion.QuestionContent = "1+1等于几?"
	choiceQuestion.QuestionType = Choice

	ChoiceQuestionMap[choiceQuestion.QuestionId] = choiceQuestion

	var blankQuestion BlankQuestion
	blankQuestion.Blank = "________"
	blankQuestion.QuestionId = 1002
	blankQuestion.QuestionContent = " 1公斤是多少克?"
	blankQuestion.QuestionType = Blank
	BlankQuestionMap[blankQuestion.QuestionId] = blankQuestion

}

func fetchFromChoiceTable(id int) (ChoiceQuestion,bool){
	result,ok := ChoiceQuestionMap[id]
	return  result,ok
}

func fetchFromBlankTable(id int) (BlankQuestion,bool){
	result,ok := BlankQuestionMap[id]
	return  result,ok
}

//修改返回值为IQuestion
func fetchQuestion(id int) (IQuestion, bool) {
	data1,ok1 := fetchFromBlankTable(id)
	data2,ok2 := fetchFromChoiceTable(id)
	if ok1 {
		return &data1,ok1
	}
	if ok2 {
		return  &data2,ok2
	}
	return nil,false
}

func showQuestion(){
	if data,ok:= fetchQuestion(1001); ok {
		var questionPrefix string
		switch data.GetQuestionType() {
		case Choice:
			{
				questionPrefix = "选择题: "
				break
			}
		case Blank:
			{
				questionPrefix = "填空题 "
				break
			}
		default:
			{
				questionPrefix = ""
				break
			}
		}
		data.AddQuestionContentPrefix(questionPrefix)
		fmt.Println("data ...",data)
	}
}

func main() {
	initial()
	showQuestion()
}

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值