森栏
您似乎正在从数据库中获取数据,然后将其保存到文本文件中。最好的方法是从数据库中获取数据,然后简单地遍历每一行。目前尚不清楚为什么将问题提出为转换 json 数据,如果它可以从数据库中获得。与其将其转换为 json,不如直接将值写入文件。您可以打开一个文件,以便附加每个条目,然后在完成文件后关闭。我提供了一个示例文件,无论返回的行数(我假设数据库中的每一行都是一个新行)或列数,它都会为您提供所需的输出。以下代码经过测试并打印:luis | gomez | 87846516 OS.APPEND 将在每次写入时附加一个新行。因此,如果您多次运行此代码,它不会覆盖它而是添加到文件中。package mainimport ( "database/sql" "fmt" "log" "os" "strings" _ "github.com/go-sql-driver/mysql")type DbDao struct { db *sql.DB}var db DbDaofunc (d *DbDao) Init(connstr string) error { db, err := sql.Open("mysql", connstr) if err != nil { return err } err = db.Ping() if err != nil { return err } d.db = db return nil}func main() { dblogin := os.Getenv("DBLOGIN") dbString := fmt.Sprintf("root:%s@/testDB", dblogin) err := db.Init(dbString) if err != nil { log.Fatal("Failed to create db connection:", err.Error()) } f, err := os.OpenFile("text.txt", os.O_RDWR|os.O_CREATE|os.O_APPEND, 0644) if err != nil { log.Fatalf("ERROR: error opening file: %v", err) } defer f.Close() queryText := "select * from stackOverflow" rows, err := db.db.Query(queryText) if err != nil { log.Fatal(err) } columns, err := rows.Columns() if err != nil { log.Fatal(err) } count := len(columns) values := make([]interface{}, count) scanArgs := make([]interface{}, count) for i := range values { scanArgs[i] = &values[i] } for rows.Next() { err := rows.Scan(scanArgs...) if err != nil { log.Fatal(err) } concat := make([]string, 0) for i, _ := range columns { v := values[i] b, ok := v.([]byte) if ok { concat = append(concat, string(b)) } else { concat = append(concat, fmt.Sprintf("%v", v)) } } line := strings.Join(concat, " | ") fmt.Println(line) _, err = f.Write([]byte(fmt.Sprintf("%s\n", line))) if err != nil { log.Fatal(err) } } return}