大佬教程收集整理的这篇文章主要介绍了数组 – golang在多播ip上发送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) } }
json.Marshal()
将值转换为JSON文本([] bytE).
另一个方向([] byte – > value)可以使用json.Unmarshal()
完成.json.Unmarshal()需要一个[]字节,因此您甚至不必将其转换为字符串.
看这个例子:
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上试试):
@H_464_7@map[key1:value1 key2:123]
笔记:
编组的结果(json.Marshal())是[]字节类型的值,因此您不需要在此处进行显式转换:
c.Write([]byte(myjson))
你可以简单地写:
c.Write(myjson)
同样在解组时,请确保将b [:n]传递给json.Unmarshal(),因为切片的其余部分包含0(您的第二个错误建议),但它们不是json文本的一部分!
以上是大佬教程为你收集整理的数组 – golang在多播ip上发送json全部内容,希望文章能够帮你解决数组 – golang在多播ip上发送json所遇到的程序开发问题。
如果觉得大佬教程网站内容还不错,欢迎将大佬教程推荐给程序员好友。
本图文内容来源于网友网络收集整理提供,作为学习参考使用,版权属于原作者。
如您有任何意见或建议可联系处理。小编QQ:384754419,请注明来意。