对不起,这完全错了。反射和JSON编组不能同时进行。
这个
json2, err := json.Marshal(request2)
零件完好:
request2
是一个
Node
(包裹在
interface{}
,这一事实在这里并不有趣)。所以callong json。对其进行封送将封送
节点
这导致
{"cmd":"Netware","name":"123"}
这就是你所期望的。
现在是
json1, err := json.Marshal(request1Val)
:Go是
静态地
键入的
还有你的
request1Val
属于reflect类型。值,该值在Go like中是完全正常类型
string
或
type myFoo struct {whatever}
。如果您将这种类型的内容传递给json。封送处理您将得到
reflect.Value
。不幸的是,这种序列化在任何方面都是毫无用处的,因为它与reflect中封装的值没有任何共同之处。价值想想反思。值作为包含request1的不透明容器。不幸的是,它是不透明的,序列化并不能神奇地揭示它隐藏的内容。
如果你想从reflect开始。实际拥有的价值使用它的
Interface()
方法“展开”容器并取回您在反射中包装的内容。价值
你的问题与反映的内容无关。值(&x)。Elem()或reflect。值(x)没有(没有)不同。你的问题源于通过反思。json的值。元帅将
从不
工作,无论反映什么。值实际有效。