GO 的 Web 开发系列(二)—— Web 项目的技术框架选择和项目搭建

Web 系统搭建第一步,选择技术框架,完成 Hello World

小玖用的 Go 版本是 1.21.6

介绍项目的技术选型个结构,不包括代码。

全文链接:https://blog.nineya.com/archives/149.html

一、技术框架选择

Web 框架: github.com/gin-gonic/gin v1.9.1

调研了 Go 开发者一圈,给小玖推荐这个框架的人最多 :tushe:

主要优点是轻量容易定制。

ORM 框架: xorm.io/xorm v1.3.6

最初小玖选的 gorm,因为网上的评价一致是:gorm 是国人开发,用户更多,文档更完善,更简单好用;xorm 的优点只是性能好点。

但是后面查问题时发现,gorm 网上相关的资料也不是那么多,所以改为了使用 xorm

(搜索 gorm 的问题,出来了很多 xorm 的相关回答)

主要是这个框架自带缓存功能,想偷懒一下~

配置文件处理工具: github.com/spf13/viper v1.18.2

这个工具可以同时处理 yamljson 和命令行参数等多种配置方式,所以选择了它。

以下这些工具包,根据网上使用人数,以及功能是否完善、丰富做的选择。

日志框架: go.uber.org/zap v1.26.0

BCrypt 生成工具: golang.org/x/crypto v0.18.0

JWT 工具: github.com/dgrijalva/jwt-go v3.2.0+incompatible

Redis 连接工具: github.com/go-redis/redis/v8 v8.11.5

MySQL 连接工具: github.com/go-sql-driver/mysql v1.7.0

UUID 生成工具: github.com/google/uuid v1.4.0

验证码生成工具: github.com/mojocn/base64Captcha v1.3.6

内存缓存工具: github.com/patrickmn/go-cache v2.1.0+incompatible

在项目新建完成后,目录下会生成一个 go.mod 文件,用于管理依赖包,在该文件中输入以下内容:

go 复制代码
module aurora

go 1.21.6

require (
	github.com/dgrijalva/jwt-go v3.2.0+incompatible
	github.com/gin-gonic/gin v1.9.1
	github.com/go-redis/redis/v8 v8.11.5
	github.com/go-sql-driver/mysql v1.7.0
	github.com/google/uuid v1.4.0
	github.com/mojocn/base64Captcha v1.3.6
	github.com/patrickmn/go-cache v2.1.0+incompatible
	github.com/spf13/viper v1.18.2
	go.uber.org/zap v1.26.0
	golang.org/x/crypto v0.18.0
	xorm.io/xorm v1.3.6
)

二、项目包结构设计

一般而言 main.go 文件是 Go 项目的启动文件,放在项目根目录,其他文件自己根据项目情况新建目录存放就可以了。

但是建议还是将源程序用一个目录统一存放,避免目录结构混乱。这个统一存放源文件的目录类似 javamian 目录。

需要注意不同的包(目录)的源程序文件不能循环引用。

小玖参考了一些其他项目的包设计,然后根据功能需要,设计的项目包目录结构如下:

复制代码
internal:项目源码根目录
|- application:业务逻辑相关的程序包
|--- model:模型层源文件包目录,包含了模型结构体
|--- param:web接口出入参的结构体源文件包目录
|--- router:web路由接口文件包目录(可以理解为controller),里面根据业务功能划分子包
|--- service:服务层源文件包目录,里面根据业务功能划分子包
|- config:配置文件相关
|- global:这个包用于存放一些公共逻辑和变量
|- initialize:项目初始化各种框架的包,比如xorm、redis、gin
|--- middleware:gin中间件的包
|- utils:放工具方法的包
resource:存放静态文件,比如vue管理后台源码
test:测试程序文件所在的包
application.yaml:程序的配置文件
go.mod:依赖管理文件
main.go:程序入口

这样在目录结构上将静态文件和 Go 源文件区分开了,各个功能模块的逻辑都较为清晰,小玖用的算是比较舒服,仅供参考。

在确定了包结构后,就可以根据各个模块的职责往里面添代码,从网上找找这些框架的配置教程即可。

一些比较核心的逻辑小玖会在后面的章节中继续介绍。

相关推荐
王码码20356 小时前
Go语言的测试:从单元测试到集成测试
后端·golang·go·接口
王码码20356 小时前
Go语言中的测试:从单元测试到集成测试
后端·golang·go·接口
里欧跑得慢6 小时前
Flutter 测试全攻略:从单元测试到集成测试的完整实践
前端·css·flutter·web
以神为界6 小时前
Python入门实操:基础语法+爬虫入门+模块使用全指南
开发语言·网络·爬虫·python·安全·web
lolo大魔王7 小时前
Go语言的异常处理
开发语言·后端·golang
音仔小瓜皮8 小时前
【Web八股】深入理解浏览器DOM事件流,灵活控制它!
前端·web
以神为界10 小时前
Web后端入门:PHP核心基础全解析(含安全要点)
网络·安全·web安全·php·web
qq_2837200510 小时前
Python Web 开发:Flask 快速入门教程
python·flask·web
曲幽13 小时前
Vue 3 组合式 API 香是香,但从Vue2迁移时你可别像我当初一样踩进这 3 个深坑里
vue3·vue2·web·watch·data·this·reactive·setup·ref
止语Lab14 小时前
Go 内存管理优化:内联是逃逸分析的隐藏杠杆
golang