go-zero: not matching destination to scan

发布于 2022-10-26 05:12:08阅读 1995

在用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) {
	。。。
}

广而告之,我的新作品《语音助手》上架Google Play了,欢迎下载体验