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
判断,不知道还没有没更好的解决办法
不。
new
生成的新对象是 zero value。Foo
是指针,它的 zero value 是 nil,而不是&Foo{}
。打印的时候自然没有输出。你想解决成什么样子?只是
fmt.Println
嘛?