gin 开发指南
创建目录
mkdir codegen-go
cd codegen-go
初始化go项目
go mod init com.site/codegen-go
如果是已存在的go项目(依赖包存储在 $GOPATH/pkg/mod 目录下),下载依赖
go mod download
把项目所需要的依赖添加到go.mod,并删除go.mod中没有被项目使用的依赖
go mod tidy
安装gin
go get -u github.com/gin-gonic/gin
go get github.com/spf13/viper
viper 库:viper适用与go应用程序中处理多种格式的配置文件(如 YAML、JSON、TOML 等);它支持:
- 设置默认值
- 从 JSON、TOML、YAML、HCL、envfile 和 Java properties文件中读取
- 实时观看和重新读取配置文件(可选)
- 从环境变量读取
- 从远程配置系统(etcd 或 Consul)读取,并观察更改
- 从命令行标志读取
- 从缓冲区读取
- 设置显式值
- Viper 可以被认为是满足所有应用程序配置需求的注册表。
orm
go 支持的数据库: https://zhuanlan.zhihu.com/p/612298168
go get -u gorm.io/gorm
go get -u gorm.io/driver/sqlite
注意:GORM默认使用gorm.io/driver/sqlite这个库作为SQLite驱动,在使用过程中遇到以下错误:
[error] failed to initialize database, got error Binary was compiled with ‘CGO_ENABLED=0’, go-sqlite3 requires cgo to work. This is a stub panic: Binary was compiled with ‘CGO_ENABLED=0’, go-sqlite3 requires cgo to work. This is a stub
大致意思是GORM SQLite驱动使用了CGO实现,需要在CGO环境下才能工作。
解决办法一:
修改CGO_ENABLED这个环境变量启用CGO支持即可:
go env -w CGO_ENABLED=1
解决办法二:
或者更换GORM默认的SQLite驱动 为 github.com/glebarez/sqlite 这个库(该库使用纯go实现,不依赖CGO):
go get -u github.com/glebarez/sqlite
这样就可以在不依赖CGO的情况下编译出静态二进制文件,从而解决跨平台依赖动态链库的问题。
代价是 glebarez/sqlite 性能不及官方驱动,并且静态编译打包后的文件体积明显增加。
连接 mysql
go get -u github.com/go-sql-driver/mysql
连接 oracle
go get -u github.com/sijms/go-ora/v2
https://www.jianshu.com/p/53d9d60a5e68
https://darcyjoven.com/go-with-oracle/
连接 postgresql
go get -u github.com/lib/pq
连接 sqlserver
go get -u github.com/microsoft/go-mssqldb
参考文档
https://blog.csdn.net/doublepg13/article/details/132345096
https://blog.csdn.net/qq_36610451/article/details/127172910
https://www.cnblogs.com/zichliang/articles/16832506.html
日志
go get -u go.uber.org/zap
go get -u github.com/lestrrat-go/file-rotatelogs
评论