gpt4 book ai didi

go - 为 golang 中的 proto buf 类型编写自定义 Marshall 和 Unmarshaller

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

我有自定义类型,我编写了自己的 Marshall 和 Unmarshaller
问题是我想使用 protobuf 做同样的事情

我只想使用 protobuf 实现相同的功能,以便我可以实现自己的 Marshall 和 Unmarshaller

syntax="proto3";

package main;

message NullInt64{
bool Valid = 1;
int64 Int64 = 2;
}

如果 Valid 值为 false 则返回 null字符串
type NullInt64 struct {
Int64 int64
Valid bool
}

// MarshalJSON try to marshaling to json
func (nt NullInt64) MarshalJSON() ([]byte, error) {
if nt.Valid {
return []byte(fmt.Sprintf(`%d`, nt.Int64)), nil
}

return []byte("null"), nil
}

// UnmarshalJSON try to unmarshal dae from input
func (nt *NullInt64) UnmarshalJSON(b []byte) error {
text := strings.ToLower(string(b))
if text == "null" {
nt.Valid = false

return nil
}

err := json.Unmarshal(b, &nt.Int64)
if err != nil {
return err
}

nt.Valid = true
return nil
}

最佳答案

Protoc 不会生成 MarshalJSONUnmarshalJSON职能。
你可以:

  • 使用不同的 protobuf 生成器(参见 gogo/protobuf 和很多 extensions 或 fork golang/protobuf 来更改它们的 generator )
  • 将您自己的函数插入 proto通过将文件添加到该文件夹​​来打包。您可以手写或代码生成这些函数。
  • 关于go - 为 golang 中的 proto buf 类型编写自定义 Marshall 和 Unmarshaller,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56414869/

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