【go】protocol生成的结构体的问题
golang里protocol生成的pb代码:
type Obj struct {Foo *Foo `protobuf:"bytes,1,opt,name=foo,proto3" json:"foo,omitempty"`
XXX_NoUnkeyedLiteral struct{} `json:"-"`
XXX_unrecognized []byte `json:"-"`
XXX_sizecache int32 `json:"-"`
}
下面是问题
/*这里,按理说会打印:
start
&{<nil>}
end
但是什么也没打印出来
start
end
*/
fmt.Println("start")
fmt.Println(new(Obj))
fmt.Println("end")
本来没有发现这个问题的,直到不小心传进来一个错误的数据才发现,
jsonStr="{\"key\":\"value\"}"request:=new(Obj)
err := json.Unmarshal([]byte(jsonStr), request)
if err!=nil {
//json.Unmarshal没有报错,err是nil
fmt.Println(err)
}
//request仍旧什么都没有
fmt.Println(request)
这个问题怎么解决?
最后加了个len(request转字符串)==0
判断,不知道还没有没更好的解决办法
这里,按理说会打印:start
&{<nil>}
end
不。
new
生成的新对象是 zero value。Foo
是指针,它的 zero value 是 nil,而不是 &Foo{}
。打印的时候自然没有输出。
这个问题怎么解决?
你想解决成什么样子?只是 fmt.Println
嘛?
其实protobuffer go版本生成的结构是可以解析json格式的数据的,所以你的用法并没有错。你看后面的struct tag其实有json部分:
这个并不能算是一个错误,这个go protobuf的一个特性。
回答
以上是 【go】protocol生成的结构体的问题 的全部内容, 来源链接: utcz.com/a/114567.html