[英]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.