• 设为首页
  • 点击收藏
  • 手机版
    手机扫一扫访问
    迪恩网络手机版
  • 关注官方公众号
    微信扫一扫关注
    迪恩网络公众号

go语言中的invalidcharacter'\x00'aftertop-levelvalue

原作者: [db:作者] 来自: [db:来源] 收藏 邀请

设计的一个项目,需要从客户端中,发生一个结构体信息给服务端,服务端对接收到的信息进行验证。这里我考虑的是将结构体转换为json,然后传递至服务端,服务端解析json即可。

由于json的数据格式就是[]byte,所以在网络传递中不需要转换,直接传递就可以了。对方接收到[]byte数据,也就是json数据,直接json解析就行了。

然而,在服务端中解析时,显示invalid character '\x00' after top-level value。

结构体代码:

type Message struct {
	Name string
	Info string
}

先附上客户端和服务端代码。

客户端:

tcpAddr, _ := net.ResolveTCPAddr("tcp", "127.0.0.1:9999")
conn, err := net.DialTCP("tcp", nil, tcpAddr)

message.Name = "cloud"
message.Info = "LIST"
data, _ := json.Marshal(message)
conn.Write(data)

  服务端代码:

//读取一个客户端发送过来的数据
data := make([]byte, 128)
total, err := tcpConn.Read(data)
var message Message
err = json.Unmarshal(data, &message)
if err != nil {
        fmt.Println(err)
}

  fmt.println这里,就显示invalid character '\x00' after top-level value,经过分析,将

 

err = json.Unmarshal(data, &message)

  改为

err = json.Unmarshal(data[:total], &message)

  

即可。原因在于,数据读取是有长度的,如果没有规定,默认会把最后一个字符删掉(我的猜测,目前我还不是很清楚,懂的大神请帮忙回答)
还有一点,结构体的字段名称,必须首字母大写,我也搞不懂为什么是这个样子。

 

鲜花

握手

雷人

路过

鸡蛋
该文章已有0人参与评论

请发表评论

全部评论

专题导读
上一篇:
Go 版本入 Dubbo 生态一周年:已和 Spring Cloud、gRPC 互通发布时间:2022-07-10
下一篇:
首页被改成www.go2000.com的解决方法发布时间:2022-07-10
热门推荐
热门话题
阅读排行榜

扫描微信二维码

查看手机版网站

随时了解更新最新资讯

139-2527-9053

在线客服(服务时间 9:00~18:00)

在线QQ客服
地址:深圳市南山区西丽大学城创智工业园
电邮:jeky_zhao#qq.com
移动电话:139-2527-9053

Powered by 互联科技 X3.4© 2001-2213 极客世界.|Sitemap