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 源文件区分开了,各个功能模块的逻辑都较为清晰,小玖用的算是比较舒服,仅供参考。

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

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

相关推荐
CXDNW14 分钟前
【网络篇】计算机网络——应用层详述(笔记)
服务器·笔记·计算机网络·http·web·cdn·dns
Z3r4y10 小时前
【Web】复现n00bzCTF2024 web题解(全)
web·ctf·wp·n00bzctf·n00bzctf2024
__AtYou__12 小时前
Golang | Leetcode Golang题解之第448题找到所有数组中消失的数字
leetcode·golang·题解
千年死缓14 小时前
go+redis基于tcp实现聊天室
redis·tcp/ip·golang
吃着火锅x唱着歌18 小时前
Redis设计与实现 学习笔记 第五章 跳跃表
golang
技术卷21 小时前
Redis数据库与GO完结篇:redis操作总结与GO使用redis
数据库·redis·golang
white.tie1 天前
vscode配置golang
ide·vscode·golang
陈序缘1 天前
Go语言实现长连接并发框架 - 任务管理器
linux·服务器·开发语言·后端·golang
0x派大星1 天前
【Golang】语法基础——切片:灵活、高效的数据处理利器
golang
技术卷2 天前
GO网络编程(二):客户端与服务端通信【重要】
golang·网络编程