Go语言从数据库中导出csv文件
仅展示从数据库中导出csv文件代码,相关知识详见早期文章:https://www.nowcoder.com/discuss/499739474956394496?sourceSSR=users
数据库中user表信息:
import ( "database/sql" "encoding/csv" _ "github.com/go-sql-driver/mysql" "log" "os" "strconv" ) type User struct { Uid int Name string Phone string Email string } func querySql() []User { db, err := sql.Open("mysql", "root:******@tcp(192.168.8.132:3306)/goTest") if err != nil { log.Fatalf("open sql server failed. %v\n", err) return nil } defer db.Close() rows, err := db.Query("select uid, name, phone, email from user where uid > ?", 0) if err != nil { log.Fatalf("query sql failed, %v\n", err) return nil } defer rows.Close() var u User var users []User for rows.Next() { err := rows.Scan(&u.Uid, &u.Name, &u.Phone, &u.Email) users = append(users, u) if err != nil { log.Fatalf("scan failed, %v\n", err) return nil } } return users } func writeCsv(fileName string, data [][]string) { fp, err := os.Create(fileName) if err != nil { log.Fatalf("create file failed, %v\n", err) } writer := csv.NewWriter(fp) writer.WriteAll(data) writer.Flush() } func main() { fileName := "exportUser.csv" users := querySql() mainSlice := [][]string{{ "uid", "name", "phone", "email", }} for _, u := range users { var subSlice []string subSlice = append(subSlice, strconv.Itoa(u.Uid)) subSlice = append(subSlice, u.Name) subSlice = append(subSlice, u.Phone) subSlice = append(subSlice, u.Email) mainSlice = append(mainSlice, subSlice) } writeCsv(fileName, mainSlice) }
运行结果: