亚洲在线久爱草,狠狠天天香蕉网,天天搞日日干久草,伊人亚洲日本欧美

為了賬號安全,請及時綁定郵箱和手機立即綁定
已解決430363個問題,去搜搜看,總會有你想問的

Redshift 返回 []uint8 而不是整數,它們之間的轉換返回不正確的值

Redshift 返回 []uint8 而不是整數,它們之間的轉換返回不正確的值

Go
白豬掌柜的 2023-06-19 11:11:22
我有一個接受 SQL 查詢的服務,使用數據庫/sql 驅動程序在 Amazon Redshift 上運行查詢。但是,我無法將結果轉換為結構,因為查詢是各種表上的大數據任務,而不是在此服務中創建的。所以我必須返回一個“松散”的數據結構。我正在解析返回到 JSON 中的數據并將其存儲在 S3 中。但是,我在返回的數據類型方面遇到了一些奇怪的問題。對于數字列的查詢返回 uint8 的映射而不是數字值。我知道這是因為數據庫驅動程序無法決定將其轉換為什么,因為它可能不精確。但我似乎也無法在 []uint8 和整數之間進行轉換。這是我查詢數據庫的代碼:// Execute executes SQL commandsfunc (r *Runner) Execute(query string, args ...interface{}) (types.Results, error) {    var results types.Results    rows, err := r.db.Query(query, args...)    if err != nil {        return results, err    }    columns, _ := rows.Columns()    colNum := len(columns)    values := make([]interface{}, colNum)    for i := range values {        var ii interface{}        values[i] = &ii    }    for rows.Next() {        rows.Scan(values...)        result := make(types.Result)        for i, colName := range columns {            rawValue := *(values[i].(*interface{}))            if reflect.TypeOf(rawValue).String() == "[]uint8" {                byteVal := rawValue.([]byte)                val := Intfrombytes(byteVal)                log.Println("Converted:", val)            }            result[colName] = rawValue        }        results = append(results, result)    }    return results, nil}我創建了以下函數來嘗試在[]uint8和之間進行轉換uint32。func Intfrombytes(bytes []uint8) uint16 {    bits := binary.LittleEndian.Uint16(bytes)    return bits}但是,如果我插入200該表,我會返回12339。一般來說,這種方法感覺很不穩定。我懷疑我為此使用 Go 的決定,因為我正在處理未定義的、松散的數據結構。是否有更好的方法來處理通用查詢(例如我的示例),或者是否有方法可以將我的數字結果轉換為整數?
查看完整描述

1 回答

?
慕哥6287543

TA貢獻1831條經驗 獲得超10個贊

我認為您實際上可能正在解釋一個字符串 ([]uint8 == []byte)。請參閱https://play.golang.org/p/Rfpey2NPiI7


originalValue := []uint8{0x32, 0x30, 0x30} // "200"

bValue := []byte(originalValue) // byte is a uint8 anyway

fmt.Printf("Converted to uint16: %d\n", binary.LittleEndian.Uint16(bValue))

fmt.Printf("Actual value: %s", string(bValue))

在處理pq一些加密代碼之前,這讓我很痛苦。


查看完整回答
反對 回復 2023-06-19
  • 1 回答
  • 0 關注
  • 142 瀏覽
慕課專欄
更多

添加回答

舉報

0/150
提交
取消
微信客服

購課補貼
聯系客服咨詢優惠詳情

幫助反饋 APP下載

慕課網APP
您的移動學習伙伴

公眾號

掃描二維碼
關注慕課網微信公眾號