> 文章列表 > go+vue——基于gin框架和gorm的web开发实战

go+vue——基于gin框架和gorm的web开发实战

go+vue——基于gin框架和gorm的web开发实战

go+vue——基于gin框架和gorm的web开发实战

  • gin框架
    • 视频、资料、笔记
    • 安装Go环境, 添加环境变量(可能自动添加好)
      • 下载 Go
      • 环境变量
      • goland 报错: GOROOT is not defined
    • 创建项目:
      • Golang中的GoPath和GoModule
        • 什么是GoPath?
          • 优缺点
        • 什么是GoModule?
        • GoModule的设置
      • Goland项目使用gomod配置
        • Environment GOPROXY=https://goproxy.cn
        • 其他, 不一定需要
      • 检查 是否可以 运行程序
    • web 本质 : net/http介绍
      • 课件、教程
      • 启动
      • 读文件
    • gin
      • 下载 安装
      • 使用 gin
      • RESTful API
      • Postman
    • Go语言标准库之template
      • Go语言的模板引擎
      • 模板引擎的使用
      • 模板语法
        • {{.}} + 注释
        • 变量
        • 移除空格
        • 条件
        • 比较
        • 循环
          • slice
          • range else
        • with
        • 预定义 函数 index
      • 自定义函数
        • 报错: 模板 名字不一样
        • 自定义函数
      • 模板嵌套
        • 三种模板
        • 先写 父亲, 再写 孩子
      • 模板继承 block
        • 绝大多数 模板一样
        • block 定义 块 , 作为 base
        • define 重新定义模板,
        • 父模板 写前面, 根模板 写后面
        • ExecuteTemplate 指定哪个模板, 不是 之前的 Execute
        • 将数据 传递 子模板 , 加一个 “.”
        • 模板冲突 解决
        • 修改默认 标识符 分隔符 delimiter
        • htmp/template 安全 转移 防止攻击
          • 自定义函数 解决 是否需要 转义
  • 结尾

gin框架

视频、资料、笔记

Go web开发系列教程,基于Gin框架和GORM的练手小项目。
视频中博客地址:https://liwenzhou.com ,
源码地址:https://github.com/Q1mi/bubble
笔记gitee

安装Go环境, 添加环境变量(可能自动添加好)

下载 Go

B站视频

  1. 安装 go 的环境,菜鸟教程
  2. 安装 数据库 mysql
  3. 安装一个测试工具 , postman / apipost
  4. golang / vscode
  5. navicat

https://www.kancloud.cn/shuangdeyu/gin_book/949412

https://gorm.io/zh_CN/docs/

环境变量

go+vue——基于gin框架和gorm的web开发实战
D:\\Dsoftware\\go\\install2\\Go\\bin

go+vue——基于gin框架和gorm的web开发实战

goland 报错: GOROOT is not defined

go故障排查集锦 : https://www.cnblogs.com/chalon/p/15151474.html
go+vue——基于gin框架和gorm的web开发实战

C:\\Users\\Administrator> go env |findstr GOROOT
set GOROOT=D:\\Dsoftware\\go\\install2\\Go

go+vue——基于gin框架和gorm的web开发实战
go+vue——基于gin框架和gorm的web开发实战
go+vue——基于gin框架和gorm的web开发实战
go+vue——基于gin框架和gorm的web开发实战

创建项目:

Golang中的GoPath和GoModule

https://blog.csdn.net/delete_you/article/details/128693981

什么是GoPath?

GoPath是Golang的工作空间,所有的Go文件,都需要放在GoPath下的src目录下才能够编译运行,所以我提议不要直接配置全局的GoPath目录,否则会非常难以管理所有的Golang项目。

但是在另一篇博客Golang连接MySQL数据库之CRUD中,我也提到过,我们在项目中使用第三方类库的时候,可以使用go get命令从网下直接拉去第三方类库的包,而拉取下来的包就会直接下载到我们的GoPath目录下的src包下。

这样就导致了一个问题,我们自己的Golang代码,和第三方的Golang文件混在了一起,这对于我们管理Golang项目的包显然是非常麻烦的,而且每个如果项目都需要同样的依赖,那么我们就会在不同的GoPath的src中下载大量重复的第三方依赖包,这同样会占用大量的磁盘空间。

优缺点

我们给不同的项目设置不同的GoPath,优点非常明显:

便于管理项目,每个项目都是不同的GoPath,这对于我们管理多个Golang项目而言,能够非常清晰的处理项目结构。如果我们把所有项目都放在同一个GoPath的src包下,那么项目的结构就会变得非常混乱,难以管理。

但是当我们需要依赖第三方的包的时候,不同的项目设置不同的GoPath的缺点也非常明显:

第三方依赖的包和我们自己的Golang包混在一起,会给我们的项目文件管理带来一定的麻烦。
不同的GoPath都需要下载依赖,那么磁盘中重复的依赖就会非常多,会占用我们大量的磁盘空间。
所以,究竟是设置一个GoPath目录,解决依赖重复的问题,还是设置不同的GoPath目录,解决Golang项目结构混乱的问题,这是一个有争议性的问题。

为了解决这所有的问题,Golang最终引入了GoModule的概念。

什么是GoModule?

GoModule是Golang在1.11版本初步引入的概念,在1.12版本中正是开始使用,所以如果需要使用GoModule,那么需要保证你的Golang的版本在1.12或以上。
另外需要说一下,Golang1.11和1.12版本虽然已经引入了GoModule的概念,但是GoModule是默认不开启的,如果需要开启,那么需要配置一个环境变量:GO111MODULE=on,默认是off。

而在Golang1.13及以上的版本中,GoModule的默认配置为auto,即GoModule会通过你的目录下是否有go.mod文件来判断是否开启GoModule。所以Golang1.13+的版本中我们就不需要配置GO111MODULE属性了。
所以如果你使用GoModule,那么就直接使用Golang1.13+的版本好了!

那么究竟什么是GoModule?

其实说得直白一下,GoModule就是一个用来取代GoPath的Golang的工作空间。
我们之前说过,所有的Golang的文件,都需要放在GoPath目录下才能进行正确的编译和运行,而有了GoModule之后,那么我们就可以把文件放在GoModule目录下,而放在GoModule目录下的Golang文件,也可以正确地编译运行。

那么我们有了GoModule之后,GoPath是不是就可以被舍弃了?

不是的!

我们之前说过,GoPath所引出的问题,就是因为第三方类库的包所导致的,所以我们在有了GoModule之后,GoPath和GoModule就分别负责不同的职责,共同为我们的Golang项目服务。

GoPath我们用来存放我们从网上拉取的第三方依赖包。
GoModule我们用来存放我们自己的Golang项目文件,当我们自己的项目需要依赖第三方的包的时候,我们通过GoModule目录下的一个go.mod文件来引用GoPath目录src包下的第三方依赖即可。

这样依赖,既解决了原来只能局限在GoPath目录src包下进行编程的问题,也解决了第三方依赖包难以管理和重复依赖占用磁盘空间的问题。

总而言之,在引入GoModule之后,我们不会直接在GoPath目录进行编程,而是把GoPath作为一个第三方依赖包的仓库,我们真正的工作空间在GoModule目录下。

GoModule的设置

参考教材
https://www.jb51.net/article/236436.htm

Goland项目使用gomod配置

手把手2022版本,

Goland 项目创建
https://blog.csdn.net/delete_you/article/details/128693981

goland2020.3 及以上 IDE,默认创建的 go 项目 就是使用 gomod 管理!
goland2020.3 及以下的 IDE,创建项目时需要选择 带小括号 vgo 的才是 gomod 管理模式

Environment GOPROXY=https://goproxy.cn

https://goproxy.cn
GOPROXY=https://goproxy.cn,direct

go+vue——基于gin框架和gorm的web开发实战

其他, 不一定需要

检查 是否可以 运行程序

go+vue——基于gin框架和gorm的web开发实战

web 本质 : net/http介绍

课件、教程

https://liwenzhou.com
https://www.liwenzhou.com/posts/Go/golang-menu/
https://www.liwenzhou.com/posts/Go/http/
go+vue——基于gin框架和gorm的web开发实战
go+vue——基于gin框架和gorm的web开发实战

启动

go+vue——基于gin框架和gorm的web开发实战

读文件

go+vue——基于gin框架和gorm的web开发实战
go+vue——基于gin框架和gorm的web开发实战

gin

下载 安装

下载并安装Gin:go get -u github.com/gin-gonic/gin

go+vue——基于gin框架和gorm的web开发实战

使用 gin

go+vue——基于gin框架和gorm的web开发实战

RESTful API

RESTful API
REST与技术无关,代表的是一种软件架构风格,REST是Representational State Transfer的简称,中文翻译为“表征状态转移”或“表现层状态转化”。

推荐阅读阮一峰 理解RESTful架构

简单来说,REST的含义就是客户端与Web服务器之间进行交互的时候,使用HTTP协议中的4个请求方法代表不同的动作。

GET用来获取资源
POST用来新建资源
PUT用来更新资源
DELETE用来删除资源。
只要API程序遵循了REST风格,那就可以称其为RESTful API。目前在前后端分离的架构中,前后端基本都是通过RESTful API来进行交互。

例如,我们现在要编写一个管理书籍的系统,我们可以查询对一本书进行查询、创建、更新和删除等操作,我们在编写程序的时候就要设计客户端浏览器与我们Web服务端交互的方式和路径。按照经验我们通常会设计成如下模式:

请求方法 URL 含义
GET /book 查询书籍信息
POST /create_book 创建书籍记录
POST /update_book 更新书籍信息
POST /delete_book 删除书籍信息
同样的需求我们按照RESTful API设计如下:

请求方法 URL 含义
GET /book 查询书籍信息
POST /book 创建书籍记录
PUT /book 更新书籍信息
DELETE /book 删除书籍信息
go+vue——基于gin框架和gorm的web开发实战

Postman

https://www.postman.com/

go+vue——基于gin框架和gorm的web开发实战
go+vue——基于gin框架和gorm的web开发实战

Go语言标准库之template

Go语言的模板引擎

Go语言内置了文本模板引擎text/template和用于HTML文档的html/template。它们的作用机制可以简单归纳如下:

模板文件通常定义为.tmpl和.tpl为后缀(也可以使用其他的后缀),必须使用UTF8编码。
模板文件中使用{{和}}包裹和标识需要传入的数据。
传给模板这样的数据就可以通过点号(.)来访问,如果数据是复杂类型的数据,可以通过{ { .FieldName }}来访问它的字段。
除{{和}}包裹的内容外,其他内容均不做修改原样输出。

go+vue——基于gin框架和gorm的web开发实战

模板引擎的使用

定义模板文件
其中,定义模板文件时需要我们按照相关语法规则去编写,后文会详细介绍。解析模板文件
上面定义好了模板文件之后,可以使用下面的常用方法去解析模板文件,得到模板对象:func (t *Template) Parse(src string) (*Template, error)
func ParseFiles(filenames ...string) (*Template, error)
func ParseGlob(pattern string) (*Template, error)
当然,你也可以使用func New(name string) *Template函数创建一个名为name的模板,然后对其调用上面的方法去解析模板字符串或模板文件。模板渲染
渲染模板简单来说就是使用数据去填充模板,当然实际上可能会复杂很多。func (t *Template) Execute(wr io.Writer, data interface{}) error
func (t *Template) ExecuteTemplate(wr io.Writer, name string, data interface{}) error

模板语法

{{.}} + 注释

模板语法都包含在{{和}}中间,其中{{.}}中的点表示当前对象。

当我们传入一个结构体对象时,我们可以根据.来访问结构体的对应字段。例如:
go+vue——基于gin框架和gorm的web开发实战

go+vue——基于gin框架和gorm的web开发实战

变量

go+vue——基于gin框架和gorm的web开发实战

移除空格

go+vue——基于gin框架和gorm的web开发实战

条件

go+vue——基于gin框架和gorm的web开发实战

比较

go+vue——基于gin框架和gorm的web开发实战

循环

slice idx, value
map key, value

slice

go+vue——基于gin框架和gorm的web开发实战

range else

go+vue——基于gin框架和gorm的web开发实战

with

go+vue——基于gin框架和gorm的web开发实战
类似于
go+vue——基于gin框架和gorm的web开发实战

预定义 函数 index

go+vue——基于gin框架和gorm的web开发实战

自定义函数

go+vue——基于gin框架和gorm的web开发实战

报错: 模板 名字不一样

go+vue——基于gin框架和gorm的web开发实战
go+vue——基于gin框架和gorm的web开发实战

自定义函数

go+vue——基于gin框架和gorm的web开发实战
go+vue——基于gin框架和gorm的web开发实战

模板嵌套

go+vue——基于gin框架和gorm的web开发实战

三种模板

go+vue——基于gin框架和gorm的web开发实战

先写 父亲, 再写 孩子

go+vue——基于gin框架和gorm的web开发实战

模板继承 block

绝大多数 模板一样

go+vue——基于gin框架和gorm的web开发实战
go+vue——基于gin框架和gorm的web开发实战

block 定义 块 , 作为 base

go+vue——基于gin框架和gorm的web开发实战

define 重新定义模板,

go+vue——基于gin框架和gorm的web开发实战

父模板 写前面, 根模板 写后面

go+vue——基于gin框架和gorm的web开发实战

ExecuteTemplate 指定哪个模板, 不是 之前的 Execute

go+vue——基于gin框架和gorm的web开发实战

将数据 传递 子模板 , 加一个 “.”

go+vue——基于gin框架和gorm的web开发实战

模板冲突 解决

如果我们的模板名称冲突了,例如不同业务线下都定义了一个index.tmpl模板,我们可以通过下面两种方法来解决。在模板文件开头使用{{define 模板名}}语句显式的为模板命名。
可以把模板文件存放在templates文件夹下面的不同目录中,然后使用template.ParseGlob("templates/**/*.tmpl")解析模板。

go+vue——基于gin框架和gorm的web开发实战

修改默认 标识符 分隔符 delimiter

go+vue——基于gin框架和gorm的web开发实战

htmp/template 安全 转移 防止攻击

go+vue——基于gin框架和gorm的web开发实战

自定义函数 解决 是否需要 转义

go+vue——基于gin框架和gorm的web开发实战

结尾