簡體   English   中英

如何將任何數據類型轉換為 Go 中的字節

[英]How to convert any data type to a byte in Go

我正在嘗試制作一個將任何數據類型轉換為字節數組的 for 循環......這就是我現在所擁有的

var arrByte [][]byte
    for _,v := range *arr.(*[]interface{}) {
        string := fmt.Sprint(v)   // What can I put here so that I dont have to convert to string
        arrByte = append(arrByte, []byte(string))
    }

這段代碼的問題是我無法將它轉換回它的數據類型。 那么如何直接更改它以保持格式正確,以便我以后可以運行它?

var arrInterface []interface{}

    for _,v := range arrByte {
        data := binary.BigEndian.Uint64(v)
        arrInterface = append(arrInterface, data)
    }

首先,關於術語的注釋:您似乎在談論字節而不是字節 arrays。 Go 中的 Arrays 是固定長度的,因此在它們上調用append將不起作用。 請參閱此處了解更多信息。

現在回答你的問題...

我正在嘗試制作一個 for 循環,它將任何數據類型轉換為字節數組......

這是不可能的,除非在最膚淺、毫無意義的意義上。 例如,如果您有一個net.Conn類型的變量,將其轉換為字節將給您一個無意義的值,因為它僅在與一個特定的活動網絡連接結合使用時才有意義。

但是,假設您沒有像這樣引用臨時 state 的變量,將任意變量轉換為字節切片的最簡單方法是使用gob encoding之類的方法。

但是,這也有局限性,在序列化結構時,它只能訪問導出的字段,或者通過GobEncoder接口公開的字段。 此問答解釋了為什么存在此限制

現在,在某些情況下,您可以通過反射來解決此限制,但是這樣做非常麻煩,而且通常是不明智的,因為未導出的字段通常引用臨時 state(請參閱上面的注釋)。

總而言之:不可能對所有數據類型都有意義地執行此操作。 對於許多數據類型來說很難做到這一點,而對於“普通”數據類型來說做到這一點是微不足道的。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM