Python 转换到 Golang 一些笔记
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 文件自动升级数据库(默认不会删除,只会新增)