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