正在為 Go 中的 MySQL 到 JSON 組裝一個(gè)快速轉(zhuǎn)儲(chǔ)器。但是我發(fā)現(xiàn)我從數(shù)據(jù)庫(kù)中檢索的所有內(nèi)容都是一個(gè)[]byte數(shù)組。因此,我將所有內(nèi)容都編碼為字符串,而不是原生 JSON 整數(shù)或布爾值。代碼的子集:import ( "encoding/json" "database/sql" _ "github.com/go-sql-driver/mysql")func dumpTable(w io.Writer, table) { // ... rows, err := Query(db, fmt.Sprintf("SELECT * FROM %s", table)) checkError(err) columns, err := rows.Columns() checkError(err) scanArgs := make([]interface{}, len(columns)) values := make([]interface{}, len(columns)) for i := range values { scanArgs[i] = &values[i] } for rows.Next() { err = rows.Scan(scanArgs...) checkError(err) record := make(map[string]interface{}) for i, col := range values { if col != nil { fmt.Printf("\n%s: type= %s\n", columns[i], reflect.TypeOf(col)) switch t := col.(type) { default: fmt.Printf("Unexpected type %T\n", t) case bool: fmt.Printf("bool\n") record[columns[i]] = col.(bool) case int: fmt.Printf("int\n") record[columns[i]] = col.(int) case int64: fmt.Printf("int64\n") record[columns[i]] = col.(int64) case float64: fmt.Printf("float64\n") record[columns[i]] = col.(float64) case string: fmt.Printf("string\n") record[columns[i]] = col.(string) case []byte: // -- all cases go HERE! fmt.Printf("[]byte\n") record[columns[i]] = string(col.([]byte)) case time.Time: // record[columns[i]] = col.(string) } } } s, _ := json.Marshal(record) w.Write(s) io.WriteString(w, "\n") }}
- 3 回答
- 0 關(guān)注
- 527 瀏覽
添加回答
舉報(bào)
0/150
提交
取消