go实现导出excel或csv文件

go实现导出excel或csv文件

很早之前的一个项目需求要,需要把公司信息列表和漏洞信息列表导出excel文件,没有很高要求,能看就行吧,就做了导出csv的两个接口。 最近看我的CSDN发现好久没有写了,惭愧啊!其实遇到的问题,我都有详细记录,自己能看懂,但分享给别人也能看懂就需要好好写了,尽量有空整吧,需要坚持!


实现代码

我把实现代码简单写了一下,是用调用接口的方式实现的,用的gin 包。

最近又有了导出CSV文件的需求,就重新修改了一下这篇文章,根据不同情况分类4类,用4个api来分别请求实现。
第一个接口是这个文章之前的代码,直接返回了文件,请求接口就下载文件,因为在代码里创建了文件。
第二、三、四个接口都是,代码里只返回对应文件格式的数据,需要前端进行处理保存到对应的文件中实现下载。

先说一下优缺点,第一种,需要后端在进程里创建对应的文件保存,最后还要删除掉,如果请求多或文件内容多,都会给后端内存造成很大压力,所以建议使用后面的api,让前端直接获取数据进行保存文件。也要看各自的需求吧,看代码。

Content-Type

下载文件一般要设置对应的文件格式,就是Content-Type ,包括 http 的mime type,知道这个内容的可以跳过直接先看代码,有疑问可以先看下这几篇文章:
1, HTTP Content-Type(MIME List)介绍
2, 阿里云 MIME List 介绍
3, 菜鸟学院 MEMI List 介绍

package main
import (
	"bytes"
	"encoding/csv"
	"fmt"
	"net/http"
	"os"
	"time"

	"github.com/gin-gonic/gin"
	"github.com/tealeg/xlsx"
)

type Server struct {
   
	engine *gin.Engine
}

func NewServer() *Server {
   
	ser := &Server{
   
	    // 用的gin.Default()引擎,自带Logger and Recovery两个中间件,也可以用gin.New(),不带中间件
		engine: gin.Default(),  
	}
	return ser
}

// 这个是为了造数据,可以忽略。
type Student struct {
   
	ID    string
	Name  string
	Age   string
	Score string
	Addr  string
	Date  string
}
// 造数据的方法
func (s *Server) getData() []*Student {
   
	res := make([]*Student, 0, 25)

	for i := 1; i <= 20; i++ {
   
		res = append(res, &Student{
   
			ID:    fmt.Sprintf("2021000000%d", i),
			Name:  fmt.Sprintf("辣条精-%d", i),
			Age:   fmt.Sprintf("1%d", i),
			Score: fmt.Sprintf("8%d", i),
			Addr:  fmt.Sprintf("辣条小镇太平村-%d号", i),
			Date:  fmt.Sprintf("2012-12-%d", i),
		})
	}
	return res
}

// 这是对应的4个接口,下面会具体说明一下不同接口的作用。
func (s *Server) Start() {
   
	gin.SetMode(gin.ReleaseMode)
	s.engine.GET("/csv", s.csvApi)              //1,请求后直接下载csv文件
	s.engine.GET("/csv_data"
  • 1
    点赞
  • 12
    收藏
    觉得还不错? 一键收藏
  • 3
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值