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)
}
运行结果:

