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+插件生成代码是不合适的,需要解析,请问如何解析?
ProtoBuf 生成 Go 代码去掉 JSON tag omitempty