go-zero: not matching destination to scan
发布于 2022-10-26 13:12:08阅读 2908
在用go-zero写一个通过api调用grpc的一个功能
问题还原
错误的返回值
func (m *customCwFlashModel) FindListByPage(ctx context.Context, page, max int64) (resp []*flash.AdminFlashDetailResponse, err error) {
。。。
}
这是一个查询flash列表的自定义模型,flash的定义有三处,分别是model部分
、api部分
和grpc部分
model部分
这是go-zero通过sql自动生成的
CwFlash struct {
Id int64 `db:"id"`
Title string `db:"title"`
Image string `db:"image"` // 图片
Url string `db:"url"` // 链接
Status uint64 `db:"status"` // 是否显示,1是 0否
Sort uint64 `db:"sort"` // 排序desc
CreateTime uint64 `db:"create_time"`
UpdateTime uint64 `db:"update_time"`
}
api部分
flash.api
type (
AdminFlashDetailRequest {
FlashId int64 `path:"flash_id"`
}
AdminFlashDetailResponse {
Id int64 `json:"id"`
Title string `json:"title"`
Image string `json:"image"`
Url string `json:"url"`
Status int `json:"status"`
Sort int `json:"sort"`
CreateTime int64 `json:"create_time"`
UpdateTime int64 `json:"update_time"`
}
)
type (
AdminFlashListRequest {
Page int64 `form:"page"`
Max int64 `form:"max"`
}
AdminFlashListResponse {
List []AdminFlashDetailResponse `json:"list"`
}
)
service api {
@handler FlashListHandler
get /flash (AdminFlashListRequest) returns (AdminFlashListResponse)
}
grpc部分
flash.proto
message AdminFlashListRequest {
int64 page = 1;
int64 max = 2;
}
message AdminFlashListResponse {
int64 count=1;
repeated AdminFlashDetailResponse list=2;
}
message AdminFlashDetailResponse {
int64 id=1;
string title=2;
string image=3;
string url=4;
int64 status=5;
int64 sort=6;
int64 create_time=7;
int64 update_time=8;
}
问题解决
经过一番折腾,最终发现返回值的类型用成了grpc部分
定义的,其实应该使用model部分
定义的,所以开头的代码应该修改为
func (m *customCwFlashModel) FindListByPage(ctx context.Context, page, max int64) (resp []*CwFlash, err error) {
。。。
}