数组 – golang在多播ip上发送json
发布时间:2020-12-16 09:24:43 所属栏目:大数据 来源:网络整理
导读:我正在写一个Go来发送多播udp上的json数据: func send(a string,messages chan interface{}) { addr,err := net.ResolveUDPAddr("udp",a) CheckError(err) c,err := net.DialUDP("udp",nil,addr) CheckError(err) for { msg := -messages myjson,err := jso
我正在写一个Go来发送多播udp上的json数据:
func send(a string,messages chan interface{}) { addr,err := net.ResolveUDPAddr("udp",a) CheckError(err) c,err := net.DialUDP("udp",nil,addr) CheckError(err) for { msg := <-messages myjson,err := json.Marshal(msg) if err != nil { fmt.Println("Error encoding JSON") return } //Write to bytes to multicast UDP c.Write([]byte(myjson)) time.Sleep(2 * time.Second) } } 所以我的json被转换为一个byte数组,以使其工作.这是我的“接收器”功能: func serveMulticastUDP(a string,messages chan interface{}) { addr,a) CheckError(err) l,err := net.ListenMulticastUDP("udp",addr) l.SetReadBuffer(maxDatagramSize) for { b := make([]byte,maxDatagramSize) n,src,err := l.ReadFromUDP(b) if err != nil { log.Fatal("ReadFromUDP failed:",err) } s := string(b[:n])//here is my problem,I want s to be map[string]interface before sending in my channel messages<-s log.Println(s) log.Println(src) log.Println(n) //h(src,n,b) } } 如何将一个字节数组转换为map [string] interface(json)? 解决方法
在您的代码中,您使用
json.Marshal() 将值转换为JSON文本([] byte).
另一个方向([] byte – > value)可以使用 看这个例子: data := []byte(`{"key1":"value1","key2":123}`) var m map[string]interface{} if err := json.Unmarshal(data,&m); err != nil { panic(err) } fmt.Printf("%+v",m) 输出(在Go Playground上试试): map[key1:value1 key2:123] 笔记: 编组的结果(json.Marshal())是[]字节类型的值,因此您不需要在此处进行显式转换: c.Write([]byte(myjson)) 你可以简单地写: c.Write(myjson) 同样在解组时,请确保将b [:n]传递给json.Unmarshal(),因为切片的其余部分包含0(您的第二个错误建议),但它们不是json文本的一部分! (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |