【gocarina/gocsv】GolangによるCSV出力方法

Golang
  • URLをコピーしました!

こんにちは!RYOTAです!

当記事をご覧くださりありがとうございます!

当記事はタイトル通りGo言語でCSVを出力するためのライブラリと実装方法の紹介となります!

目次

はじめに

Go言語をCSV出力をする機会があったのでDBからのデータをCSVファイルにして保存する処理を説明していこうと思います。

今回使ったものは下記のライブラリです。

ライブラリ

実装方法

サクッと実装可能なので淡々と進めていきましょう。

gocarina/gocsvのインストール

$ go get -u github.com/gocarina/gocsv

インポート

import (
  "github.com/gocarina/gocsv"
)

テストデータ準備

吐き出し用のテストデータを定義します。

今回は適当にIDとnameだけ。

type ArrayTest struct {
	Id   int
	Name string
}

func main() {
	testArray := []ArrayTest{
		{Id: 1, Name: "test1"},
		{Id: 2, Name: "test2"},
		{Id: 3, Name: "test3"},
		{Id: 4, Name: "test4"},
		{Id: 5, Name: "test5"},
	}
}

構造体へのマッピング

上記で作成したテストデータをCSV用のデータとしてマッピングします。

DBから取得したデータの変換処理を入れるためにCSV用の構造体を作成しました。

特に変換が必要ない場合はマッピングしなくても直接出力が可能です。

type CsvTest struct {
	Id   int    `csv:id`
	Name string `csv:name`
}

var csvTest []CsvTest
for _, v := range testArray {
	csvDate := CsvTest{
		Id:   v.Id,
		Name: v.Name,
	}

	csvTest = append(csvTest, csvDate)
}

CSV出力

こちらが今回のメインの処理です。

簡単すぎますね…

file, _ := os.OpenFile("test.csv", os.O_RDWR|os.O_CREATE, os.ModePerm)
defer file.Close()
gocsv.MarshalFile(csvTest, file)

実行

上記で実装が完了したので実行してみます。

$ go rum csv.go

無事に出力!

さいごに

今回はGo言語でCSVの出力処理を実装しましたが、サクッと実装できたので正直びっくりしました。

構造体へのマッピングが始め抵抗がありましたが、慣れれば割と楽に実装できるかもれません。

もっとシンプルな実装方法があったら是非教えてください。笑

最後までご覧くださりありがとうございました!

Golang

この記事が気に入ったら
フォローしてね!

よかったらシェアしてね!
  • URLをコピーしました!
  • URLをコピーしました!
目次