package main import ( json2 "encoding/json" "fmt" "lc/common/protocol" "testing" ) func TestQueryDeviceState(t *testing.T) { var ret1 protocol.Pack_CHZB_UploadData mapData := make(map[string]*protocol.CHZB_LampData) var data protocol.CHZB_LampData data.Data = make(map[uint16]float64) data.SetStateErrorData(nil) //data.Data[0] = float64(0) data.Data[1] = float64(1) data.Data[2] = float64(0) data.Data[3] = 3 data.Data[4] = 0.0 data.Data[5] = 0.0 data.Data[6] = 6 data.Data[7] = 0.0 data.Data[8] = 8 //by hxz 1,2,3,6,8为有效 data.Data[9] = 0.0 mapData["160000003194"] = &data fmt.Printf("mapData:\n%+v\n", mapData) fmt.Printf("data.Data:\n%+v\n", data.Data) if str, err := ret1.EnCode("160000003194", appConfig.GID, 1, 2, mapData); err != nil { //GetMQTTMgr().Publish(GetTopic(protocol.DT_LAMPCONTROLLER, o.devinfo.DevCode, protocol.TP_YM_DATA), str, mqtt.AtMostOnce, ToCloud) fmt.Printf("error :%s\n", err) fmt.Printf("encode result:%s\n", str) } else { fmt.Printf("error :%s\n", err) fmt.Printf("encode result:%s\n", str) } } type test struct { i int m map[int]float64 } // 测试jsoniter "github.com/json-iterator/go" 的MarshalToString方法会panic;encoding/json 的marshal方法正常。 func TestJsonMarshal(t *testing.T) { var map1 = make(map[string]*test) var map2 = make(map[int]float64) map2[1] = 1 map2[2] = 2 map2[3] = 3 var tt test tt.i = 0 tt.m = map2 map1["18"] = &tt marshal, err := json2.Marshal(map2) if err != nil { fmt.Printf("encoding/json err:%v\n", err) } fmt.Printf("encoding/json tostring:%s ok!\n", string(marshal)) fmt.Printf("###################################################\n") defer func() { if e := recover(); e != nil { //panic("jsoniter panic!\n") fmt.Printf("jsoniter panic:%v nonononono!\n", e) } }() toString, err2 := json.MarshalToString(map2) if err2 != nil { fmt.Printf("jsoniter err:%v\n", err2) return } fmt.Printf("jsoniter tostring:%s\n", toString) }