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

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

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

相关推荐
程序员与背包客_CoderZ39 分钟前
Node.js异步编程——Callback回调函数实现
前端·javascript·node.js·web
我重来不说话42 分钟前
免费Ollama大模型集成系统——Golang
golang·gin·ollama·免费大模型
Asus.Blogs43 分钟前
为什么go语言中返回的指针类型,不需要用*取值(解引用),就可以直接赋值呢?
开发语言·后端·golang
林鸿群6 小时前
go语言实现IP归属地查询
开发语言·golang·ip归属地
st紫月7 小时前
用vue和go实现登录加密
前端·vue.js·golang
YGGP8 小时前
浅析 Golang 内存管理
golang·内存泄露·内存逃逸
Chandler249 小时前
Go 语言 net/http 包使用:HTTP 服务器、客户端与中间件
服务器·http·golang
Chandler2410 小时前
Go语言:json 作用和语法
开发语言·golang·json
李匠202417 小时前
C++GO语言微服务之图片、短信验证码生成及存储
开发语言·c++·微服务·golang
Cxzzzzzzzzzz1 天前
Kafka Go客户端--Sarama
中间件·golang·kafka·linq