gpt4 book ai didi

go - 如何在 GoLang 测试用例中发送 google.protobuf.Struct 数据?

转载 作者:行者123 更新时间:2023-12-01 19:47:03 27 4
gpt4 key购买 nike

我正在使用 GRPC/proto-buffers 在 GoLang 中编写我的第一个 API 端点。我对 GoLang 比较陌生。
下面是我为我的测试用例编写的文件

package my_package

import (
"context"
"testing"

"github.com/stretchr/testify/require"

"google.golang.org/protobuf/types/known/structpb"
"github.com/MyTeam/myproject/cmd/eventstream/setup"
v1handler "github.com/MyTeam/myproject/internal/handlers/myproject/v1"
v1interface "github.com/MyTeam/myproject/proto/.gen/go/myteam/myproject/v1"
)

func TestEndpoint(t *testing.T) {
conf := &setup.Config{}

// Initialize our API handlers
myhandler := v1handler.New(&v1handler.Config{})

t.Run("Success", func(t *testing.T) {

res, err := myhandler.Endpoint(context.Background(), &v1interface.EndpointRequest{
Data: &structpb.Struct{},
})
require.Nil(t, err)

// Assert we got what we want.
require.Equal(t, "Ok", res.Text)
})


}
EndpointRequest是这样的对象在 v1.go 中定义上面包含的文件:
// An v1 interface Endpoint Request object.
message EndpointRequest {
// data can be a complex object.
google.protobuf.Struct data = 1;
}

这似乎有效。

但是现在,我想做一些稍微不同的事情。在我的测试用例中,而不是发送一个空的 data对象,我想发送带有键/值对的 map /字典 A: "B", C: "D" .我该怎么做?如果我更换 Data: &structpb.Struct{}Data: &structpb.Struct{A: "B", C: "D"} ,我收到编译器错误:
invalid field name "A" in struct initializer
invalid field name "C" in struct initializer

最佳答案

您初始化的方式 Data意味着您期待以下内容:

type Struct struct {
A string
C string
}

然而, structpb.Struct定义如下:
type Struct struct {   
// Unordered map of dynamically typed values.
Fields map[string]*Value `protobuf:"bytes,1,rep,name=fields,proto3" json:"fields,omitempty" protobuf_key:"bytes,1,opt,name=key,proto3" protobuf_val:"bytes,2,opt,name=value,proto3"`
// contains filtered or unexported fields
}

显然,那里有点不匹配。您需要初始化 Fields结构的映射并使用正确的方式设置 Value领域。等效于您显示的代码是:
Data: &structpb.Struct{
Fields: map[string]*structpb.Value{
"A": &structpb.Value{
Kind: &structpb.Value_StringValue{
StringValue: "B",
},
},
"C": &structpb.Value{
Kind: &structpb.Value_StringValue{
StringValue: "D",
},
},
},
}

关于go - 如何在 GoLang 测试用例中发送 google.protobuf.Struct 数据?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/61967136/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com