pkg/export 提供 Excel / CSV 导出与流式写出能力,主要面向结构体切片数据。
ExportExcel(data any, opts ...ExcelOption) ([]byte, error)StreamExcel(dataChan <-chan any, writer io.Writer, opts ...ExcelOption) errorErrExcelInvalidData:数据不是结构体/结构体切片时返回ExportCSV(data any, opts ...CSVOption) ([]byte, error)StreamCSV(dataChan <-chan any, writer io.Writer, opts ...CSVOption) errorErrCSVInvalidData:数据不是结构体/结构体切片时返回CanInterface() 为真)WithExcelSheet(name):单 Sheet 名称WithExcelHeaders(headers):表头WithExcelStyle(style):全局样式WithExcelRowStyle(style):数据行样式WithExcelDateFormat(layout):时间格式WithExcelLocation(loc):时间时区WithExcelSheets(names):多 Sheet 模式WithExcelStyles(styles):多 Sheet 样式WithExcelRowStyles(styles):多 Sheet 行样式WithCSVDelimiter(delimiter):分隔符,默认 ,WithCSVEncoding(encoding):UTF-8 或 GBKWithCSVHeaders(headers):表头WithCSVDateFormat(layout):时间格式WithCSVLocation(loc):时间时区type User struct {
ID int
Name string
Email string
}
content, err := export.ExportExcel([]User{
{ID: 1, Name: "Alice", Email: "a@example.com"},
}, export.WithExcelHeaders([]string{"ID", "姓名", "邮箱"}))
_ = content
_ = err
content, err := export.ExportExcel(data,
export.WithExcelSheets([]string{"Users-A", "Users-B"}),
export.WithExcelHeaders([]string{"ID", "Name", "Email"}),
)
_ = content
_ = err
content, err := export.ExportCSV(data,
export.WithCSVHeaders([]string{"ID", "Name", "Email"}),
export.WithCSVEncoding("GBK"),
)
_ = content
_ = err
var writer io.Writer
ch := make(chan any)
go func() {
defer close(ch)
ch <- []User{{ID: 1, Name: "Alice", Email: "a@example.com"}}
ch <- []User{{ID: 2, Name: "Bob", Email: "b@example.com"}}
}()
_ = export.StreamCSV(ch, writer, export.WithCSVHeaders([]string{"ID", "Name", "Email"}))
Context 直接封装了导出能力:
c.ExportExcelc.StreamExcelc.ExportCSVc.StreamCSVexport.xlsxexport.csvr.GET("/users/export", func(c *gin.Context) {
_ = c.ExportExcel(users, "users.xlsx",
export.WithExcelHeaders([]string{"ID", "姓名", "邮箱"}),
)
})