Skip to main content
Version: 2.7.x(Latest)

建立数据表


建立一张新的数据表,用以保存单词,并且加上联合唯一索引uid, word,限制单个用户不能添加相同的单词。

CREATE TABLE words (
id INT UNSIGNED NOT NULL AUTO_INCREMENT PRIMARY KEY,
uid INT UNSIGNED NOT NULL,
word VARCHAR ( 255 ) NOT NULL,
definition TEXT,
example_sentence TEXT,
chinese_translation VARCHAR ( 255 ),
pronunciation VARCHAR ( 255 ),
proficiency_level SMALLINT UNSIGNED,
created_at DATETIME,
updated_at DATETIME
);

ALTER TABLE words ADD UNIQUE (uid, word);
字段名类型解释
idINT UNSIGNED主键,自动递增,唯一标识单词
uidINT UNSIGNED用户id,标记该单词所属用户
wordVARCHAR(255)单词,不允许为空
definitionTEXT单词定义
example_sentenceTEXT示例句子
chinese_translationVARCHAR(255)单词的中文翻译
pronunciationVARCHAR(255)单词的发音
proficiency_levelSMALLINT单词掌握程度,1级最低,5级最高
created_atDATETIME记录创建时间
updated_atDATETIME记录最后更新时间

生成单词数据模型


$ gf gen dao

执行成功后,会生成下列文件:

internal/model/do/words.go
internal/model/entity/words.go
internal/dao/internal/words.go
internal/dao/words.go

自定义数据模型


像用户模型一样,如法炮制的在model自定义一个数据模型,用作Logic入参。

internal/model/words.go

package model  

type ProficiencyLevel uint

const (
ProficiencyLevel1 ProficiencyLevel = iota + 1
ProficiencyLevel2
ProficiencyLevel3
ProficiencyLevel4
ProficiencyLevel5
)

type WordInput struct {
Uid uint
Word string
Definition string
ExampleSentence string
ChineseTranslation string
Pronunciation string
ProficiencyLevel ProficiencyLevel
}

在这里我们自定义了一个数据类型ProficiencyLevel,表示单词的掌握程度,并定义了五个枚举值:ProficiencyLevel1-5从低到高表示级别。

这种自定义类型加上固定枚举值的方式是一种高级的程序设计技巧,可以广泛用在各类状态上,比如订单状态,项目阶段等。新手在编程总喜欢使用int一把梭,最后造成代码里全是1,2,3...这种数字状态,导致代码的可读性和可维护性较差。