登录
首页 >  Golang >  Go问答

生成带有描述性名称类型属性的枚举使用protobuf

来源:stackoverflow

时间:2024-02-18 09:36:24 299浏览 收藏

最近发现不少小伙伴都对Golang很感兴趣,所以今天继续给大家介绍Golang相关的知识,本文《生成带有描述性名称类型属性的枚举使用protobuf》主要内容涉及到等等知识点,希望能帮到你!当然如果阅读本文时存在不同想法,可以在评论中表达,但是请勿使用过激的措辞~

问题内容

一直在尝试通过 protobuf 将我们的枚举合并到 c# 和 go 库中,目前我一直在试图弄清楚如何保留枚举的“显示名称”属性。例如:enum spouseex 的显示名称为“spouse ex”。在 c# 中执行此操作的正常方法是在属性中定义它,而在 go 中,我们将重写 string() 方法。但不知道如何使用 protobuf 来实现它。

我在网上查了一下,似乎我可能需要使用选项/自定义 https://developers.google.com/protocol-buffers/docs/proto3#customoptions 这就是我最终使用的

syntax = "proto3";
import "google/protobuf/descriptor.proto";
package enums.test;
option go_package = "github.com/tester/common/proto/enums;enums";

extend google.protobuf.EnumValueOptions {
  string enum_value_option = 5000;
}

enum TestEnum {
    NA = 0;
    ThisIsATest = 1 [(enum_value_option) = "this is a test"];
}

但是生成的输出没有给出任何指示“这是一个测试”已编译。事实上,在测试枚举的 string() 函数时,我仍然只是得到“thisisatest”。请注意,proto3 中的选项语法与 proto2 中的选项语法略有不同。


正确答案


在阅读了这篇so帖子How to access proto.EnumValueOptions extension values后就明白了

不知道 getextension 方法,但基本上在查看该答案后,这就是我想到的:

func TestThis(t *testing.T) {
 vals := enums.TestEnum_ThisIsATest.Descriptor().Values()
 valDesc := vals.ByName("ThisIsATest")
 ext := proto.GetExtension(valDesc.Options(), enums.E_TestValueOption)
 fmt.Println(ext)
}

现在我只需要弄清楚如何将其抽象出来(如果可能的话),以便我可以在序列化/反序列化期间重用它

理论要掌握,实操不能落!以上关于《生成带有描述性名称类型属性的枚举使用protobuf》的详细介绍,大家都掌握了吧!如果想要继续提升自己的能力,那么就来关注golang学习网公众号吧!

声明:本文转载于:stackoverflow 如有侵犯,请联系study_golang@163.com删除
相关阅读
更多>
最新阅读
更多>
课程推荐
更多>