登录
首页 >  Golang >  Go问答

Go中如何使用protobuf Any类型?

来源:stackoverflow

时间:2024-02-20 23:27:25 154浏览 收藏

本篇文章给大家分享《Go中如何使用protobuf Any类型?》,覆盖了Golang的常见基础知识,其实一个语言的全部知识点一篇文章是不可能说完的,但希望通过这些问题,让读者对自己的掌握程度有一定的认识(B 数),从而弥补自己的不足,更好的掌握它。

问题内容

我有一条消息,例如

message response {
  google.protobuf.any id = 1;
  string message = 3;
}

我想在 id 中编码 int32string

我可以通过制作一些包装类型来实现这一点

message intwrapper {
  int32 id = 1;
}

并使用 github.com/golang/protobuf/ptypes 中的 ptypes.marshalany 来编组我的新类型,因为它们实现了 proto.message

ptypes.MarshalAny(&myproto.IntWrapper{Id: 1})

我想在没有包装的情况下执行此操作。是否有 proto.message 的实现用于普通 int32string 或其他方法来执行此操作?

(脚注:我不想实现 proto.message,但提供或自动生成)


解决方案


虽然包装是必要的,但 protobuf 在 google.protobuf.wrappers.proto 中方便地提供了原始类型的包装器。

以下示例展示了如何使用从这些原型生成的包在 go 中将 google.protobuf.any 与基本类型一起使用:

package main

import (
    "fmt"

    "google.golang.org/protobuf/types/known/anypb"
    "google.golang.org/protobuf/types/known/wrapperspb"
)

func main() {
    strWrapper := wrapperspb.String("foo")
    strAny, _ := anypb.New(strWrapper)
    fmt.Println(strAny)

    intWrapper := wrapperspb.Int32(123)
    intAny, _ := anypb.New(intWrapper)
    fmt.Println(intAny)
}

到这里,我们也就讲完了《Go中如何使用protobuf Any类型?》的内容了。个人认为,基础知识的学习和巩固,是为了更好的将其运用到项目中,欢迎关注golang学习网公众号,带你了解更多关于的知识点!

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