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

來源:互聯網
上載者:User

標籤:div   size   level   struct   net   資料讀取   資訊   invalid   eve   

設計的一個項目,需要從用戶端中,發生一個結構體資訊給服務端,服務端對接收到的資訊進行驗證。這裡我考慮的是將結構體轉換為json,然後傳遞至服務端,服務端解析json即可。

由於json的資料格式就是[]byte,所以在網路傳遞中不需要轉換,直接傳遞就可以了。對方接收到[]byte資料,也就是json資料,直接json解析就行了。

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

結構體代碼:

type Message struct {Name stringInfo 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 Messageerr = 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)

  

即可。原因在於,資料讀取是有長度的,如果沒有規定,預設會把最後一個字元刪掉(我的猜測,目前我還不是很清楚,懂的大神請幫忙回答)
還有一點,結構體的欄位名稱,必須首字母大寫,我也搞不懂為什麼是這個樣子。

 

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

相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.