goPetStore: 基于go的无框架web项目

goPetStore是从java的jpetStore移植到go的无框架web项目,采用MVC分层,使用html/template进行模板渲染,连接mysql数据库,并利用gorilla/sessions处理session。本文档详细记录了从java到go的转变过程,包括html/template库的踩坑、数据库操作、session使用以及go值传递的理解。
摘要由CSDN通过智能技术生成

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 库进行模板渲染,其中在本次开发中遇到和需要注意的点有:

  1. 传给模板的结构体属性名需要大写,不然非导出,模板获取不到值

  2. 模板中没有按照指定索引从列表中获取值的方法,如果需要,可以自己进行函数编写和注册

  3. 在进行模板渲染时,第一个传入的文件路径是主文件模板。要按照模板中出现的顺序进行传参和解析

    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}}<
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值