protoc-生成go指针

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了protoc-生成go指针相关的知识,希望对你有一定的参考价值。

参考技术A   因为在一些场景中指针表示的含义是比类型表示的多的

假设上述结构体表示一个用户的信息,创建用户后希望更新用户名时该怎么实现?这里隐藏的一个问题就是: address 为空字符串时,到底是表示不更新该字段?还是表示将该字段置为空?

使用指针的意义就是该字段可以额外表示一重含义

protoc : libprotoc 3.17.3

protoc-gen-go : 1.5.2

optional 对于 protoc 和 protoc-gen-go 的版本都是有依赖的,在低版本中还需要带上额外字段

[需要带上--experimental_allow_proto3_optional]( protocol buffers - How to define an optional field in protobuf 3 - Stack Overflow )

使用上面同样的 protoc 文件,发现是无法支持的

在 gogo/protobuf 还未支持 optional 的语法,一种可行的解法就是在 proto3 中导入 proto2 的文件,并且把需要定义为指针的字段放在 proto2 中

不过在网络上很难找到 wktptr 的介绍,这个语法也非常让人困惑

nullable 扩展字段无法支持原生类型,此扩展字段对此是无效的

  

这样可以将需要定义为指针的元素定义到 proto2 中然后内嵌进来

以上是关于protoc-生成go指针的主要内容,如果未能解决你的问题,请参考以下文章

2022-04-06:go中proto文件能跨平台,那是因为能生成不同语言的代码,做框架开发用protoc+插件生成代码是不合适的,需要解析,请问如何解析?

gRPC之.proto生成go文件并创建grpc服务端

Go

ProtoBuf 生成 Go 代码去掉 JSON tag omitempty

ProtoBuf 生成 Go 代码去掉 JSON tag omitempty

go使用grpc实现go与go,go与C#相互调用