我已经为我的待办事项列表应用程序创建了CSV导出功能.函数正在运行,处理程序正在返回一个写入的文件,但我在控制台中从Gin框架中得到了一种奇怪的panic :

http:写入超过声明的内容长度

这是至关重要的吗?我该如何解决这种panic .

这是我的职责:

func (r *Repository) CSVExport() (*os.File, error) {
    tasks, err := r.getAllTasks()
    if err != nil {
        return nil, err
    }

    file, err := os.Create("tasks.csv")
    if err != nil {
        return nil, err
    }
    defer file.Close()

    writer := csv.NewWriter(file)
    defer writer.Flush()

    var taskNameList []string
    for _, task := range tasks {
        taskNameList = append(taskNameList, task.Text)
    }

    err = writer.Write(taskNameList)
    if err != nil {
        return nil, err
    }

    return file, nil
}

这是处理程序:

func CSVExport(data model.ListOperations) gin.HandlerFunc {
    return func(c *gin.Context) {
        tasks, err := data.CSVExport()
        if err != nil {
            c.JSON(http.StatusBadRequest, gin.H{"error": "Invalid Task"})
        }
        c.FileAttachment("./tasks.csv", "tasks.csv")
        c.Writer.Header().Set("attachment", "filename=tasks.csv")
        c.JSON(200, tasks)
    }
}

推荐答案

您的代码有一些错误:

  • 您需要返回错误
  • 在使用fileAttachment返回文件后,不能返回JSON(它已经完成了这项工作)
func CSVExport(data model.ListOperations) gin.HandlerFunc {
    return func(c *gin.Context) {
        tasks, err := data.CSVExport()
        if err != nil {
            c.JSON(http.StatusBadRequest, gin.H{"error": "Invalid Task"})
            return //stop it on error
        }
        c.FileAttachment("./tasks.csv", "tasks.csv")
        c.Writer.Header().Set("attachment", "filename=tasks.csv")
        //c.JSON(200, tasks) not need the fileAttachement func do it
    }
}

Go相关问答推荐

Golang regexpp:获取带有右括号的单词

具有GRPC的RBAC(基于角色的访问控制)-网关生成的REST风格的API

即使HTTP服务器正在使用GO和Protobuf、SQL Server启动,请求也不返回结果

Golang使用Run()执行的命令没有返回

在GO中创建[]字符串类型的变量

无法获取RPC描述符

Prometheus 摘要分位数错误

在多个 struct 体中重用 Go 中的函数

在golang二进制中嵌入SvelteKit

在 Go 中解组编号的 XML 标签

自定义 Fyne 自适应网格布局

判断不同 go map 类型中的重复键

如何将整数哈希细分为范围

为什么不同的 Wireguard 私钥会产生相同的公钥?

如何使用 fyne Go 使用 canvas.NewText() 使文本可滚动

Golang模板无法访问embedFS中的文件

关系不存在 GORM

Golang ACMEv2 HTTP-01 挑战不挑战服务器

具有相同提前返回语句的函数的不同基准测试结果

Gorilla/Mux 和 Websocket 竞赛条件,这安全吗?