You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何使用Go encoding/csv包向CSV文件写入多行值?

解决Go语言encoding/csv写入合并单元格内容的问题

首先,咱们先揪出你代码里的核心问题:你试图把[]string类型的multiValue直接作为一个单元格传入w.Write(),但csv.Writer.Write()方法接收的[]string参数里,每个元素都对应CSV的一个独立单元格,而且类型上也不匹配(你相当于把切片嵌套进了切片里),这肯定没法得到你想要的结果。

要实现你期望的输出,你需要先把multiValue里的字符串拼接成一个单独的字符串,再作为单个单元格传入,具体修改步骤如下:

  1. 导入strings包,用来拼接字符串
  2. 把multiValue切片的元素合并成一个字符串
  3. 调用Write时传入正确的单元格切片,同时别忘了刷新缓冲区并检查错误

修改后的完整代码:

package main

import (
    "encoding/csv"
    "log"
    "os"
    "strings"
)

func main() {
    fileName := "output.csv"
    fh, err := os.Create(fileName)
    if err != nil {
        log.Fatalf("Could not create file: %v", err)
    }
    defer fh.Close()

    w := csv.NewWriter(fh)
    defer w.Flush() // 确保程序退出前刷新缓冲区,把数据写入文件

    normalValue := "I am a single line value"
    multiValue := []string{"I am a ", "multi line value"}
    // 把切片里的所有字符串合并成一个整体
    joinedMultiValue := strings.Join(multiValue, "")

    // 写入一行数据,每个元素对应CSV的一个单元格
    if err := w.Write([]string{normalValue, joinedMultiValue}); err != nil {
        log.Fatalf("Failed to write CSV record: %v", err)
    }

    // 检查Flush操作是否有错误(比如文件写入失败)
    if err := w.Error(); err != nil {
        log.Fatalf("Failed to flush CSV writer: %v", err)
    }
}

运行这段代码后,生成的CSV内容会和你期望的完全一致:

I am a single line value,"I am a multi line value"

额外补充:如果你的multiValue里包含换行符(真正的多行内容),csv.Writer会自动识别并把这个单元格用双引号包裹,完全符合CSV规范,不需要你手动处理引号。

内容的提问来源于stack exchange,提问作者max

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.25 08:05:38