[公告] Golang CSV工具 - 数据转换功能详解
[公告] Golang CSV工具 - 数据转换功能详解 我在我的CSV工具集中添加了一个转换实用程序。它接收CSV输入和一个"text/template"模板,并将该模板应用于CSV的每一行。
展示的示例是从CSV生成SQL INSERT语句。
希望你喜欢!
请查看github.com/mandolyte/csv-utils中的transformcsv
1 回复
更多关于[公告] Golang CSV工具 - 数据转换功能详解的实战系列教程也可以访问 https://www.itying.com/category-94-b0.html
这是一个非常实用的CSV数据处理工具扩展。通过结合Go标准库的text/template包,你的transformcsv工具为CSV数据转换提供了强大的灵活性。
以下是一个使用示例,展示如何从CSV数据生成SQL INSERT语句:
package main
import (
"bytes"
"encoding/csv"
"fmt"
"log"
"text/template"
)
// 示例CSV数据
var csvData = `id,name,age,email
1,John Doe,30,john@example.com
2,Jane Smith,25,jane@example.com
3,Bob Johnson,35,bob@example.com`
// SQL INSERT模板
const sqlTemplate = `INSERT INTO users (id, name, age, email) VALUES ({{.id}}, '{{.name}}', {{.age}}, '{{.email}}');`
func main() {
// 读取CSV数据
reader := csv.NewReader(bytes.NewBufferString(csvData))
records, err := reader.ReadAll()
if err != nil {
log.Fatal(err)
}
// 解析模板
tmpl, err := template.New("sql").Parse(sqlTemplate)
if err != nil {
log.Fatal(err)
}
// 获取表头
headers := records[0]
// 处理每一行数据
for i, record := range records {
if i == 0 { // 跳过表头
continue
}
// 创建数据映射
data := make(map[string]string)
for j, header := range headers {
data[header] = record[j]
}
// 应用模板
var result bytes.Buffer
err := tmpl.Execute(&result, data)
if err != nil {
log.Fatal(err)
}
fmt.Println(result.String())
}
}
输出结果:
INSERT INTO users (id, name, age, email) VALUES (1, 'John Doe', 30, 'john@example.com');
INSERT INTO users (id, name, age, email) VALUES (2, 'Jane Smith', 25, 'jane@example.com');
INSERT INTO users (id, name, age, email) VALUES (3, 'Bob Johnson', 35, 'bob@example.com');
这个实现展示了核心功能:
- 使用
encoding/csv读取CSV数据 - 通过
text/template解析和执行模板 - 将每行数据映射到模板变量
- 生成最终的SQL语句
该工具的优势在于模板的灵活性,用户可以轻松修改模板来生成不同格式的输出,比如JSON、XML或其他自定义格式。

