【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】protocol生成的结构体的问题

这个并不能算是一个错误,这个go protobuf的一个特性。

回答

以上是 【go】protocol生成的结构体的问题 的全部内容, 来源链接: utcz.com/a/114567.html

回到顶部