为了账号安全,请及时绑定邮箱和手机立即绑定

不能使用提供程序作为 type []*versioner。提供程序在字段值中响应

不能使用提供程序作为 type []*versioner。提供程序在字段值中响应

Go
千巷猫影 2022-08-30 14:43:36
我有以下无法编译的代码片段:func (r *ProviderServer) ListProvider(ctx context.Context, in *emptypb.Empty) (*versioner.ListProvidersResponse, error) {    providers, err := r.store.FindAll()    return &versioner.ListProvidersResponse{Providers: providers}, err}编译器抱怨:cannot use providers (type *[]versioner.ProviderResponse) as type []*versioner.ProviderResponse in field value的定义如下:ListProviderResponsetype ProviderResponse struct {    state         protoimpl.MessageState    sizeCache     protoimpl.SizeCache    unknownFields protoimpl.UnknownFields    Name        string `protobuf:"bytes,1,opt,name=name,proto3" json:"name,omitempty"`    Description string `protobuf:"bytes,2,opt,name=description,proto3" json:"description,omitempty"`}type ListProvidersResponse struct {    state         protoimpl.MessageState    sizeCache     protoimpl.SizeCache    unknownFields protoimpl.UnknownFields    Providers []*ProviderResponse `protobuf:"bytes,1,rep,name=providers,proto3" json:"providers,omitempty"`}和 :r.store.FindAll()type ProviderStore interface {    FindAll() (*[]versioner.ProviderResponse, error)    ...}我做错了什么?
查看完整描述

1 回答

?
慕森卡

TA贡献1806条经验 获得超8个赞

您的存储方法返回一个,它是指向值切片的指针。*[]versioner.ProviderResponseversioner.ProviderResponse


您正在尝试将 具有上述类型的 分配给声明为 的结构字段,该字段是指向 的指针切片。providers[]*ProviderResponseversioner.ProviderResponse


类型不匹配,编译器会告诉您这一点。


如果这只是一个拼写错误,那么这是一个简单的修复。如果您无法完全控制其中一些源代码(或者如果类型完全按照它们必须的方式声明),则只需将存储结果重新映射到结构字段:


providers, err := r.store.FindAll()

if err != nil {

   // 

}

if providers == nil {

   // must check this, since you want to dereference

}


res := make([]*versioner.ProviderResponse, len(*providers))

for i, v := range *providers {

    v2 := v

    res[i] = &v2 // don't address the loop variable

}


return &versioner.ListProvidersResponse{

    Providers: res, // now assigning the correct type

}, err

为什么你不想解决循环变量(tl;dr,因为它被重用了)


查看完整回答
反对 回复 2022-08-30
  • 1 回答
  • 0 关注
  • 59 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信