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


設計的一個項目,需要從客戶端中,發生一個結構體信息給服務端,服務端對接收到的信息進行驗證。這里我考慮的是將結構體轉換為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)

  

即可。原因在於,數據讀取是有長度的,如果沒有規定,默認會把最后一個字符刪掉(我的猜測,目前我還不是很清楚,懂的大神請幫忙回答)
還有一點,結構體的字段名稱,必須首字母大寫,我也搞不懂為什么是這個樣子。

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM