Go言語でphpのarray_filter的なことをやりたい時にこのgo-linqがそれを可能にしてくれます。条件に合ったスライス(配列)をセレクトするなど、使いこなせると大変便利です。
今回は簡単ではあるが、インストールから簡単な使い方まで紹介したいと思います。早速Go!
go-linqのインストール
ターミナルで以下のコマンドを叩いてインストールしよう。
$ go get github.com/ahmetalpbalkan/go-linq
whereでフィルターをかける
テスト用に下記のproductDataListがあるとします。
// 商品struct
type Product struct {
ProductId int
ProductName string
Price float64
}
var productDataList []Product
product1 := Product{
1,
"name1",
2.0,
}
product2 := Product{
2,
"name2",
2.0,
}
product3 := Product{
3,
"name3",
3.0,
}
productDataList = append(productDataList, product1)
productDataList = append(productDataList, product2)
productDataList = append(productDataList, product3)
fmt.Println(productDataList)// 出力:[{1 name1 2} {2 name2 2} {3 name3 3}]
WhereでPriceが2のスライスを出力してみよう
linq.From(productDataList).Where(func(i interface{}) bool { return i.(Product).Price == 2 }).ToSlice(&productDataList)
fmt.Println(productDataList)// 出力:[{1 name1 2} {2 name2 2}]
FirstWithで最初の一件だけを取得する
productData := linq.From(productDataList).FirstWith(func(i interface{}) bool {
return i.(Product).Price == 2
}).(Product)
fmt.Println(productData)// 出力:{1 name1 2}
AnyWithで指定条件のデータがあるかを調べる
hasData := linq.From(productDataList).AnyWith(
func(i interface{}) bool {
return i.(Product).ProductName == "name4"
},
)
fmt.Println(hasData)// 出力:false
Selectで好きなデータに加工して出力できる
var taxList []string
inq.From(productDataList).Select(func(i interface{}) interface{} {
return fmt.Sprintf("%sの消費税は%.1fです。", i.(Product).ProductName, i.(Product).Price*0.1)
).ToSlice(&taxList)
mt.Println(taxList)
// 出力:[name1の消費税は0.2です。 name2の消費税は0.2です。 name3の消費税は0.3です。]
まとめ
簡単ではあるが、使い方を紹介させていただきました。他にも色んな使い方ができるのでより詳しく知りたい場合はドキュメントを御覧ください。
GoはGoogle様が開発した言語で、これからはますます人気になる一方だと思われます。興味があれば勉強しておいて損はないかなと思います。ただ、文法はかなり癖があるので他の言語で慣れてると最初は少し戸惑うかもしれないですw
最近はメルカリを始めたことをきっかけに、商品の仕入や在庫管理ができるWebアプリをGoで開発中です。思ったことが形になっていくのが日に日に目に見えてモチベーションがずっと高いままで楽しいです。
Go言語を勉強するならこれ!
最後にプログラミング基礎の勉強はやはり本は一番だと思いますので、基礎をしっかり学べたい方は是非、一冊を手にとってみてはいかがでしょうか?
コメント