我在7月底,用go重构了我之前用javaweb做的一个记单词的app用来辅助记考研考纲词汇,主要是因为之前那个项目把一些东西写死了,扩展性很差。而我又需要对考研真题的生词进行记忆,而且我又刚好浅学了以下go语言,然后想着就用go来重构这个项目。
我这个项目搁置了一段时间没用,因为真题里面不认识的单词其实不多,我一般都是累计个50-60个才开始记,结果我发现在使用的时候莫名报错,去后台看发现是从session上获取的数据为null,因为go用的第三方的session,并没有自己原生的session,而这个session感觉用起来没有java的顺手,而且它数据量大了过几分钟就会出毛病。
由于我现在备战考研,时间非常紧张,所以干脆换了一种形式代替session,那就是读写json文件,这里给出了读写json文件封装的函数
package model var TableName string type Word struct { Chinese string English string } func SetName(name string) { TableName = name } func (Word) TableName() string { return TableName }
func Read() []model.Word { filePtr, err := os.Open("./info.json") if err != nil { fmt.Println("文件打开失败 [Err:%s]", err.Error()) } defer filePtr.Close() var list []model.Word // 创建json解码器 decoder := json.NewDecoder(filePtr) err = decoder.Decode(&list) if err != nil { fmt.Println("解码失败", err.Error()) } else { fmt.Println("解码成功") } return list }
此时,如果写入数据,那么就会覆盖掉原有的数据
func Write(list []model.Word) { // 创建文件 filePtr, err := os.Create("info.json") if err != nil { fmt.Println("文件创建失败", err.Error()) return } defer filePtr.Close() // 创建json解码器 encoder := json.NewEncoder(filePtr) err = encoder.Encode(&list) if err != nil { fmt.Println("解码失败", err.Error()) } else { fmt.Println("解码成功") } }
由于是又一次重构项目,我还是选择了前后端分离的形式,诚然gin有很好的模板渲染引擎,但是使用Vue+axios不仅能够提升运行速度,而且可以用elementUI组件使得页面更加漂亮,再一次强调,goweb项目打包上线是真的太方便了!!!!!!