goPetStore: 基于go的无框架web项目
前言
原项目为 java 编写的 jpetStore,原 java 版:https://blog.csdn.net/qq_39446719/article/details/80821440
现改为使用 go 语言编写,旨在上手 go web 编程,github:https://github.com/SwordHarry/gopetstore
业务模块
- 商品模块
- category
- product
- item
- search
- 购物车模块
- cart
- 用户模块
- account
- 订单模块
- order
- lineItem
- sequence
架构
template模板渲染 + go + mysql
没有使用web框架,围绕 go http标准库,旨在上手 go web 编程
采用 MVC 分层开发:DAO-persistence、service、controller、template
使用 gorilla/sessions 等第三方库进行集成迭代
架构图
从 java 到 go 的阵痛
这里列出在这个项目中从 java 到 go 需要重新学习和踩坑的点
html/template 库的学习和踩坑
go 自带 template 库进行模板渲染,其中在本次开发中遇到和需要注意的点有:
-
传给模板的结构体属性名需要大写,不然非导出,模板获取不到值
-
模板中没有按照指定索引从列表中获取值的方法,如果需要,可以自己进行函数编写和注册
-
在进行模板渲染时,第一个传入的文件路径是主文件模板。要按照模板中出现的顺序进行传参和解析
t := template.Must(template.ParseFiles(fileNames...))
这里的 fileNames 需要严格按照解析顺序进行传参,否则会造成白屏
go html/template 语法
这里列出在项目中常用的模板语法
模板嵌套
{
{
define "header"}}
<div>...</div>
{
{
end}}
//使用
{
{
template "header" .}}
判断
{
{
if and .condition1 .condition2}}
{
{
end}}
循环
{
{
range .ProductList}}
<li>{
{
.ProductId}}</li>
// 如果需要在循环内获取循环外的属性需要使用 $
<p>{
{
$.Account}}<