这是我参与「第五届青训营 」伴学笔记创作活动的第九天。今天汇总了之前学的gin框架和gorm框架,使用二者结合完成了一个小项目。
由于习惯了MVC的开发模式,所以这次的练习也是使用mvc三层架构来完成的。在mapper层中初始化,并获得了gorm中的数据库连接对象,供mapper层其他文件操作数据库,service层与java中的service层类似调用mapper层的方法获得数据并完成业务要求,controller层只有处理请求的方法并没有与路由匹配,在router层中获得gin框架的引擎对象并完成的路由与controller层各个方法的匹配,在pojo层定义了数据库的映射实体,并绑定了表名和字段名。
来到前端页面的编写,与之前的html页面编写并没有什么区别,不过之前习惯使用的thymeleaf框架在go语言中好像并不支持,并且也无法使用jsp中的jslt标签库,这导致了我无法循环遍历后台传递的集合,在尝试了多种办法无果后我在一篇博客中找到了解决办法,原来go语言有自带的前端框架,我可以使用{{range}}和{{end}}组合使用来完成循环遍历使用二者包含住被循环的结构使用{{}}表达式来取值即可。
在主方法中获取路由包中的引擎对象,并设置项目的监听端口和需要加载的静态文件,在最后使用defer关键字关闭mapper层中的数据库连接对象。
未解决的问题:后续在使用vue更新前端页面的时候出现了一个问题,当我使用v-for指令替换{{}}表达式的时候,项目会启动报错:
<tr v-for="student in StudentList" >
<th >{{student.S_id}}</th>
<th>{{student.S_name}}</th>
<th>{{student.Java}}</th>
<th>{{student.Php}}</th>
<th>{{student.C}}</th>
</tr>
删除该部分使用consol.log()输出StudentList可以拿到数据,但启动项目时会报student未定义的错误,但不启动项目直接在浏览器打开却可以正常输出,个人猜测问题出现的原因是因为没有正确引入vue或者vue与go语言自带的{{}}取值符号存在冲突,go语言的{{}}优先级更高导致的。