blog icon indicating copy to clipboard operation
blog copied to clipboard

posts/go/gin/2018-02-12-api-02/

Open utterances-bot opened this issue 4 years ago • 23 comments

「连载三」Gin搭建Blog API's (二)

https://eddycjy.com/posts/go/gin/2018-02-12-api-02/

utterances-bot avatar May 30 '20 17:05 utterances-bot

"github.com/Unknwon/com"

这里的Unknwon应该为unknwon

jmy10241024 avatar May 30 '20 17:05 jmy10241024

是不是要在 models.go 里面加上 db.AutoMigrate(&Tag{})?我这里一直提示数据库中没有这个表。

FicowShen avatar Jun 02 '20 23:06 FicowShen

另外,BeforeCreateBeforeUpdate 定义在 Model 而不是 Tag 上,是不是会更方便一点呢? 这样,我们就不用在后续的新Model类型里面定义同样的Hook方法了。

FicowShen avatar Jun 02 '20 23:06 FicowShen

如果不想用 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

FicowShen avatar Jun 03 '20 00:06 FicowShen

如果不想用 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参数多的时候, 这根本不适用,

jmy10241024 avatar Jun 08 '20 10:06 jmy10241024

另外,BeforeCreateBeforeUpdate 定义在 Model 而不是 Tag 上,是不是会更方便一点呢? 这样,我们就不用在后续的新Model类型里面定义同样的Hook方法了。

后面的章节将这个判断放到了Model中,

jmy10241024 avatar Jun 08 '20 10:06 jmy10241024

是不是要在 models.go 里面加上 db.AutoMigrate(&Tag{})?我这里一直提示数据库中没有这个表。

数据库里面的表是自己手动创建的, 你打开mysql看看,

jmy10241024 avatar Jun 08 '20 10:06 jmy10241024

Delete 操作是否换成逻辑删除?否则 deleted_on 字段 没有意义

yourNameIsGood avatar Jul 25 '20 09:07 yourNameIsGood

期间遇到了诡异的问题, post 和 get 接口在日志中都显示 [2020-07-25 17:13:49] sql: database is closed 可以确认 database 的配置肯定正确。

若干次修改 models/models.go (尝试加 log)后, 莫名其妙的就 联通了。

yourNameIsGood avatar Jul 25 '20 09:07 yourNameIsGood

怎么成了gin-blog

23494330 avatar Aug 12 '20 05:08 23494330

注册路由的时候,发现修改了运行模式还是会出现 Running in "debug" mode. 的提示,原因应该是在 gin.New() 的时候还是处于默认的 debug 模式下,后面修改模式的时候提示已经输出了。所以如果想让提示不输出的话,应该把 gin.setMode() 提前:

func InitRouter() *gin.Engine {
    gin.SetMode(setting.RunMode)

    r := gin.New()

    ...
}

2015WUJI01 avatar Mar 25 '21 02:03 2015WUJI01

注册路由的时候,发现修改了运行模式还是会出现 Running in "debug" mode. 的提示,原因应该是在 gin.New() 的时候还是处于默认的 debug 模式下,后面修改模式的时候提示已经输出了。所以如果想让提示不输出的话,应该把 gin.setMode() 提前:

func InitRouter() *gin.Engine {
    gin.SetMode(setting.RunMode)

    r := gin.New()

    ...
}

@2015WUJI01 感谢反馈,源码上之前有修复。

eddycjy avatar Jun 14 '21 09:06 eddycjy

Delete 操作是否换成逻辑删除?否则 deleted_on 字段 没有意义

@yourNameIsGood 可以的,利用 gorm callback 可以做到。

eddycjy avatar Jun 14 '21 09:06 eddycjy

是不是要在 models.go 里面加上 db.AutoMigrate(&Tag{})?我这里一直提示数据库中没有这个表。

@FicowShen 根据你习惯来就好,因为真实项目几乎用不到(因为 SQL 管控),所以我就没写进来。

eddycjy avatar Jun 14 '21 09:06 eddycjy

怎么成了gin-blog

@23494330 主要是为了统一名称了。

eddycjy avatar Jun 14 '21 09:06 eddycjy

另外,BeforeCreateBeforeUpdate 定义在 Model 而不是 Tag 上,是不是会更方便一点呢? 这样,我们就不用在后续的新Model类型里面定义同样的Hook方法了。

@FicowShen 可以的,后面新更新的系列就是定义在 Model 上了。

eddycjy avatar Jun 14 '21 09:06 eddycjy

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

liaomars avatar Sep 29 '21 07:09 liaomars

上面提的issue请忽略,自己的问题,不好意思。

liaomars avatar Sep 29 '21 09:09 liaomars

replace github.com/EDDYCJY/go-gin-example/routers/api/v1: invalid module path 我现在的文件结构也是按照一步一步来的,为啥会报这个错

Z-Champion avatar Nov 08 '21 14:11 Z-Champion

新版本中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 }

edsionxuanxuan avatar Mar 06 '22 16:03 edsionxuanxuan

POST方法用PostForm获取参数,Query是GET的。

TimidHaunter avatar Apr 24 '22 06:04 TimidHaunter

是不是要在 models.go 里面加上 db.AutoMigrate(&Tag{})?我这里一直提示数据库中没有这个表。

我也是数据库中没有表,加了autoMigrate也是一样的,可以问一下您是怎么解决这个问题的吗

xueqiudeoni avatar Apr 11 '23 02:04 xueqiudeoni

为啥post参数用url上的,好奇怪

bref0 avatar Aug 22 '23 08:08 bref0