blog
blog copied to clipboard
posts/go/gin/2018-02-12-api-02/
"github.com/Unknwon/com"
这里的Unknwon应该为unknwon
是不是要在 models.go 里面加上 db.AutoMigrate(&Tag{})
?我这里一直提示数据库中没有这个表。
另外,BeforeCreate
和 BeforeUpdate
定义在 Model
而不是 Tag
上,是不是会更方便一点呢?
这样,我们就不用在后续的新Model类型里面定义同样的Hook方法了。
如果不想用 Postman,也可以在命令行用 curl 哈~ 尤其是你本机开了 VPN 的时候,Postman 就会和 VPN 冲突,这时候 curl 就比较容易解决这个问题了。
获取标签列表
curl 127.0.0.1:8000/api/v1/tags
新建标签
curl -X POST --data "" http://127.0.0.1:8000/api/v1/tags\?name\=2\&state\=1\&created_by\=test
更新指定标签
curl -X PUT --data "" http://127.0.0.1:8000/api/v1/tags/1\?name\=edit1\&state\=0\&modified_by\=edit1
删除指定标签
curl -X DELETE http://127.0.0.1:8000/api/v1/tags/1
如果不想用 Postman,也可以在命令行用 curl 哈~ 尤其是你本机开了 VPN 的时候,Postman 就会和 VPN 冲突,这时候 curl 就比较容易解决这个问题了。
获取标签列表 curl 127.0.0.1:8000/api/v1/tags 新建标签 curl -X POST --data "" http://127.0.0.1:8000/api/v1/tags\?name\=2\&state\=1\&created_by\=test 更新指定标签 curl -X PUT --data "" http://127.0.0.1:8000/api/v1/tags/1\?name\=edit1\&state\=0\&modified_by\=edit1 删除指定标签 curl -X DELETE http://127.0.0.1:8000/api/v1/tags/1
post参数多的时候, 这根本不适用,
另外,
BeforeCreate
和BeforeUpdate
定义在Model
而不是Tag
上,是不是会更方便一点呢? 这样,我们就不用在后续的新Model类型里面定义同样的Hook方法了。
后面的章节将这个判断放到了Model中,
是不是要在 models.go 里面加上
db.AutoMigrate(&Tag{})
?我这里一直提示数据库中没有这个表。
数据库里面的表是自己手动创建的, 你打开mysql看看,
Delete 操作是否换成逻辑删除?否则 deleted_on 字段 没有意义
期间遇到了诡异的问题, post 和 get 接口在日志中都显示 [2020-07-25 17:13:49] sql: database is closed 可以确认 database 的配置肯定正确。
若干次修改 models/models.go (尝试加 log)后, 莫名其妙的就 联通了。
怎么成了gin-blog
注册路由的时候,发现修改了运行模式还是会出现 Running in "debug" mode.
的提示,原因应该是在 gin.New()
的时候还是处于默认的 debug 模式下,后面修改模式的时候提示已经输出了。所以如果想让提示不输出的话,应该把 gin.setMode()
提前:
func InitRouter() *gin.Engine {
gin.SetMode(setting.RunMode)
r := gin.New()
...
}
注册路由的时候,发现修改了运行模式还是会出现
Running in "debug" mode.
的提示,原因应该是在gin.New()
的时候还是处于默认的 debug 模式下,后面修改模式的时候提示已经输出了。所以如果想让提示不输出的话,应该把gin.setMode()
提前:func InitRouter() *gin.Engine { gin.SetMode(setting.RunMode) r := gin.New() ... }
@2015WUJI01 感谢反馈,源码上之前有修复。
Delete 操作是否换成逻辑删除?否则 deleted_on 字段 没有意义
@yourNameIsGood 可以的,利用 gorm callback 可以做到。
是不是要在 models.go 里面加上
db.AutoMigrate(&Tag{})
?我这里一直提示数据库中没有这个表。
@FicowShen 根据你习惯来就好,因为真实项目几乎用不到(因为 SQL 管控),所以我就没写进来。
怎么成了gin-blog
@23494330 主要是为了统一名称了。
另外,
BeforeCreate
和BeforeUpdate
定义在Model
而不是Tag
上,是不是会更方便一点呢? 这样,我们就不用在后续的新Model类型里面定义同样的Hook方法了。
@FicowShen 可以的,后面新更新的系列就是定义在 Model 上了。
func GetTags(pageNum int, pageSize int, maps interface{}) (tags []Tag) {
db.Where(maps).Offset(pageNum).Limit(pageSize).Find(&tags)
return
}
在启动项目的时候,提示 int is not a type
golang版本:go1.17.1 ,操作系统:windows10
上面提的issue请忽略,自己的问题,不好意思。
replace github.com/EDDYCJY/go-gin-example/routers/api/v1: invalid module path 我现在的文件结构也是按照一步一步来的,为啥会报这个错
新版本中gorm的Hook我用的是如下的代码,文中Hook方法中的参数类型*gorm.Scope好像在新版本中没有了。我是没有找到 // 创建之前钩子 func (article *Article) BeforeCreate(tx *gorm.DB) error { tx.Statement.SetColumn("CreatedOn", time.Now().Unix()) return nil }
// 更新之前钩子 func (article *Article) BeforeUpdate(tx *gorm.DB) error { if tx.Statement.Changed() { tx.Statement.SetColumn("ModifiedOn", time.Now().Unix()) } return nil }
POST方法用PostForm获取参数,Query是GET的。
是不是要在 models.go 里面加上
db.AutoMigrate(&Tag{})
?我这里一直提示数据库中没有这个表。
我也是数据库中没有表,加了autoMigrate也是一样的,可以问一下您是怎么解决这个问题的吗
为啥post参数用url上的,好奇怪