我有自己写的Marshall和Unmarshaller的自定义类型
问题是我想使用protobuf做同样的事情
我只想使用protobuf来实现相同的功能,以便可以实现自己的Marshall和Unmarshaller
syntax="proto3";
package main;
message NullInt64{
bool Valid = 1;
int64 Int64 = 2;
}
以这种方式,如果有效值为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将不会生成MarshalJSON
和UnmarshalJSON
函数。
你可以:
proto
包。您可以手写或通过代码生成这些功能。关于go - 在golang中为proto buf类型编写自定义的Marshall和Unmarshaller,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/56414869/