构建自己的go-gin-api脚手架(三)

Viper 地址:https://github.com/spf13/viper Viper 是适用于 Go 应用程序的完整配置解决方案。它被设计用于在应用程序中工作,并且可以处理所有类型的配置需求和格式。 文档 英文:可查看 Github 仓库的 README 文件 中文:可查看这篇文章的翻译 安装 go get github.com/spf13/viper 使用 新建配置文件/config/config.toml aaa = "111" bbb = "222" Viper 只需简单设置就可以读取到配置信息。 //设置文件路径 viper.AddConfigPath("/config") //设置文件名 viper.SetConfigName("config") //设置文件类型 viper.SetConfigType("toml") //读取配置文件 _ = viper.ReadInConfig() //监控配置文件变动 viper.WatchConfig() for { //输出所有配置 fmt.Println(viper.AllSettings()) time.Sleep(time.Second) } 多配置文件 随着项目开发,配置文件中的信息可能会越来越多,全部集中到一个文件中会变的难以管理。按功能分为不同的配置文件更易于管理,我们来自己实现一个多配置文件的方法。 方法一 使用MergeInConfig()方法将多个配置文件内容合并到一起。 在新建一个/config/router.toml配置文件 port = 8000 //设置文件路径 viper.AddConfigPath("/config") //设置文件名 viper.SetConfigName("config") //设置文件类型 viper.SetConfigType("toml") //读取配置文件 _ = viper.ReadInConfig() //设置第二个配置文件名称 viper.SetConfigName("router") //读取并合并已有配置 _ = viper....

2022-02-27 · 2 分钟

构建自己的go-gin-api脚手架(二)

在前文中我们已经成功的使用 Gin 框架搭建了一个简易的 API 服务,但是在一个项目中,所有的业务逻辑都写在 main.go 一个文件中显然是不合理的。所以接下来我们会对其进行重构,在整个搭建 go-gin-api 脚手架的过程中,会经常对其重构。 每当我要进行重构的时候,第一个步骤永远相同:我得确保即将修改的代码拥有一组可靠的测试。这些测试必不可少,因为尽管遵循重构手法可以使我避免绝大多数引入 bug 的情形,但我毕竟是人,毕竟有可能犯错。程序越大,我的修改不小心破坏其他代码的可能性就越大——在数字时代,软件的名字就是脆弱。 —— 《重构:改善既有代码的设计》 所以在此之前我们需要编写一套可靠的单元测试,来确保代码重构之后还能良好的运行。 Go 单元测试框架 testing testing 是 Go 标准库中提供的自动化测试支持,通过 go test 命令,能够自动执行如下形式的任何函数: func TestXxx(*testing.T) 注意:Xxx 可以是任何字母数字字符串,但是第一个字母不能是小写字母。 在这些函数中,使用 Error、Fail 或相关方法来发出失败信号。 要编写一个新的测试套件,需要创建一个名称以 _test.go 结尾的文件,该文件包含 TestXxx 函数,如上所述。 将该文件放在与被测试文件相同的包中。该文件将被排除在正常的程序包之外,但在运行 go test 命令时将被包含。 有关详细信息,请运行 go help test 和 go help testflag 了解。 标准库的 testing 实现比较简单,并不支持断言,需要写 if 判断。所以不考虑使用。 Testify 地址:https://github.com/stretchr/testify Testify 是基于 testing 编写的,所以测试文件与执行方式与其完全相同,并且支持断言方法。 编写测试 首先创建一个 main_test.go 的文件,写入以下代码并执行 go mod tidy更新依赖。...

2022-01-11 · 3 分钟

构建自己的go-gin-api脚手架(一)

目标 学习并掌握 Go 语言 学习并熟练使用 Gin 框架 学习并熟练使用 Go 热门常用的组件 搭建一个自己开箱即用的 api 框架 锻炼自己的封装抽象能力 初始化 使用 Goland 创建一个新项目go-gin-api。 可以看到项目中有一个 go.mod 的文件。 module go-gin-api go 1.17 Gin 安装 下载并安装 Gin : $ go get -u github.com/gin-gonic/gin go get: added github.com/gin-contrib/sse v0.1.0 go get: added github.com/gin-gonic/gin v1.7.7 go get: added github.com/go-playground/locales v0.13.0 ... 可以看到项目中又多了一个 go.sum 的文件,go.sum 文件详细罗列了当前项目直接或间接依赖的所有模块版本,并写明了那些模块版本的 SHA-256 哈希值以备 Go 在今后的操作中保证项目所依赖的那些模块版本不会被篡改。 go.mod 文件也发生了改变: module go-gin-api go 1.17 require ( github.com/gin-contrib/sse v0....

2022-01-10 · 1 分钟