golang csv处理

hewolf · · 3906 次点击 · · 开始浏览    
这是一个创建于 的文章,其中的信息可能已经有所发展或是发生改变。

golang csv处理库推荐使用github.com/gocarina/gocsv,这个库可以根据自动根据结构体标记进行编码

导出

假设数据结构如下:

type Student struct {
    Uid int   `csv:"uid"`
    Name string `csv:"name"`
}

导出样例:

list := []Student{xxx} //数据可以查询出来
content, err := gocsv.MarshalString(&list)
if checkError(err) {
  return
}
csvDownload(ctx, "student", content)

写了一个公共的导出函数csvDownload,避免导出乱码,写入utf-8 的bom(Byte Order Mark,字节序标记)

func csvDownload(ctx iris.Context, filename, content string) {
    ctx.Header("Content-Type", "application/csv")
    ctx.Header("Content-Disposition", fmt.Sprintf("attachment;filename=%s.csv", filename))
    ctx.WriteString("\xEF\xBB\xBF") // 写入UTF-8 BOM,防止中文乱码
    ctx.WriteString(content)
}

注意:

由于macos系统和windows系统区别,导出的csv的文件编辑后应该保存为utf8格式,由于wps导入编辑不支持编码选择,请使用开源编辑器libreofffice处理

导入

file,_, err := ctx.FormFile("txtImportFile") //txtImportFile 导入文件名
if checkErr(err) {
    return
}
list := []Student{}
if err = gocsv.Unmarshal(file, &voices); checkErr(err) { // Load clients from file
    return
}
... //后续根据list数据进行数据插入或者更新

有疑问加站长微信联系(非本文作者)

本文来自:简书

感谢作者:hewolf

查看原文:golang csv处理

入群交流(和以上内容无关):加入Go大咖交流群,或添加微信:liuxiaoyan-s 备注:入群;或加QQ群:692541889

3906 次点击  
加入收藏 微博
暂无回复
添加一条新回复 (您需要 登录 后才能回复 没有账号 ?)
  • 请尽量让自己的回复能够对别人有帮助
  • 支持 Markdown 格式, **粗体**、~~删除线~~、`单行代码`
  • 支持 @ 本站用户;支持表情(输入 : 提示),见 Emoji cheat sheet
  • 图片支持拖拽、截图粘贴等方式上传