Web開発ログ | エンジニアに役立つ情報 | 開発の中での気づきを発信

高卒Devlog

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

thumbnail

こんにちは! RYOTAです!

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

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

はじめに

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

  • gocarina/gocsv

GitHub - gocarina/gocsv: The GoCSV package aims to provide easy CSV serialization and deserialization to the golang programming language The GoCSV package aims to provide easy CSV serialization and deserialization to the golang programming language - GitHub - gocarina/gocsv: The GoCSV package aims to provide easy CSV serialization a... GitHub

実装方法

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

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の出力処理を実装しましたが、サクッと実装できたので正直びっくりしました。
構造体へのマッピングが始め抵抗がありましたが、慣れれば割と楽に実装できるかもれません。
もっとシンプルな実装方法があったら是非教えてください。笑
最後までご覧くださりありがとうございました!