1、代码和文件
Go 代码按照 package 来组织,只要在同一个 package 下的 function 都可以在另外一个页面里直接使用。这样最好目录名和目录里的文件第一行 package xxx 保持一致。

2、Go Mod
最新的 Go mod 管理需要把项目文件夹放到非 GOPATH 位置(基本就是自己习惯的 Workspace)。这样在 go run 的时候就会自动安装相关依赖包。依赖包还是会被安装在 GOPATH 里,没有需要不用去管。

3、 错误和异常管理

  • 失败原因只有一个时,不使用 error
  • 没有失败时,不使用 error
  • error 应放在返回值类型列表的最后
  • 错误值统一定义,而不是跟着感觉走

4、Go-Gin 框架基本结构
从 main.go 启动 router
在 routers 里映射 router 和 controller 的关系
在 controller 里通过 gin.Context 处理上下文,然后返回对应的值
在 controller 里引入数据库 model
在 model 里书写数据库更新操作 CRUD。

5、关于 Gin-Gorm

在 Python 等语言中(例如Flask+sqlAlchemy),查询的时候一般先取数据库,然后定位到表,然后再做查询行为,依次发生。比如:

db.Post.where(‘id=1’).first()

在 Go-Gorm 里,查询顺序稍有不同。首先仍然是获取数据库,然后就是查询语句。数据表则是通过 Struct 的引用自动绑定的。例如:

db.Create(&post)
db.Where(“id = ? “, id).Delete(&post)

这种语法显得别扭,但也没办法。Golang 就是这样一种别扭的语言,语言的创造者显得聪明过头了,从而忽视了很多普通人的思维模型。与之相对应的则是 Python 的思维,从头到尾都体现着“人性化”的思维,处处以人为本。两种语言算是各有所长。

6、数据库模型和数据库自动升级

使用 AutoMigrate ,通过更改 model 文件自动升级数据库(默认不会删除,只会新增)