在Go 中將SELECT * 列讀取到[]string 中的複雜性
資料處理中的一個常見任務是從資料庫表中檢索行並以方便的格式儲存它們。在Go中,您可以使用database/sql包來與資料庫互動。但是,遇到數量可變且類型未知的列可能會帶來挑戰。
sql.Rows 類型提供對查詢結果的訪問,但其 Scan 方法需要填入鍵入的欄位。直接將值轉換為字串切片 ([]string) 並不簡單。
解決方案:利用介面切片
要解決此問題,您必須建立一個介面切片([]interface{}),它指向字串切片中的每個字串。這涉及分配一個臨時切片並將每個元素設定為指向字串切片中的相應元素。
範例程式碼:
rawResult := make([][]byte, len(cols)) result := make([]string, len(cols)) dest := make([]interface{}, len(cols)) // A temporary interface{} slice for i, _ := range rawResult { dest[i] = &rawResult[i] // Put pointers to each string in the interface slice }
一旦介面切片準備好後,您可以使用它來掃描行。
掃描行並轉換為字串
for rows.Next() { err = rows.Scan(dest...) if err != nil { fmt.Println("Failed to scan row", err) return } for i, raw := range rawResult { if raw == nil { result[i] = "\N" } else { result[i] = string(raw) } } fmt.Printf("%#v\n", result) }
這種方法可讓您直接將列值讀取到字串切片,容納可變數量和類型的列。
以上是如何在 Go 中將 SELECT * 欄位讀入 [] 字串?的詳細內容。更多資訊請關注PHP中文網其他相關文章!