go語言中的invalid character '\x00' after top-level value

設計的一個項目,須要從客戶端中,發生一個結構體信息給服務端,服務端對接收到的信息進行驗證。這裏我考慮的是將結構體轉換爲json,而後傳遞至服務端,服務端解析json便可。json

因爲json的數據格式就是[]byte,因此在網絡傳遞中不須要轉換,直接傳遞就能夠了。對方接收到[]byte數據,也就是json數據,直接json解析就好了。網絡

然而,在服務端中解析時,顯示invalid character '\x00' after top-level value。tcp

結構體代碼:spa

type Message struct { Name string Info string }

先附上客戶端和服務端代碼。設計

客戶端:code

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) 

  服務端代碼:blog

//讀取一個客戶端發送過來的數據
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,通過分析,將string

 

err = json.Unmarshal(data, &message) 

  改成it

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

  

便可。緣由在於,數據讀取是有長度的,若是沒有規定,默認會把最後一個字符刪掉(個人猜想,目前我還不是很清楚,懂的大神請幫忙回答)
還有一點,結構體的字段名稱,必須首字母大寫,我也搞不懂爲何是這個樣子。class

相關文章
相關標籤/搜索