🙄
[golang]値の存在確認をスマートに実装する
この記事は、tacoms Advent Calendar 2024の2日目です!
他メンバーのAdvent Calendarはこちらからご覧ください!👇
概要
値の存在確認をシンプルに書けるパッケージを紹介したいと思います。
紹介するパッケージ
PythonのSet型をオマージュしたらしい。
パッケージ活用のモチベーション
- 値の存在確認はシンプルに書きたい
- 普通にやったらmapを都度定義して書かないといけないが、Valueのstruct{}を書くのは冗長だし、そもそも見慣れない人はなんでValueが空なのか?と思ってしまう
実装例
使わない場合
type Store struct {
ID uint
Name string
}
var stores = []Store{
{1, "store1"},
{2, "store2"},
{3, "store3"},
}
func sample1() {
ids := map[uint]struct{}{
2: {},
}
for _, store := range stores {
if _, ok := ids[store.ID]; ok {
// store2
fmt.Println(store.Name)
}
}
}
使った場合
type Store struct {
ID uint
Name string
}
var stores = []Store{
{1, "store1"},
{2, "store2"},
{3, "store3"},
}
func sample2() {
ids := mapset.NewSet[uint](2)
for _, store := range stores {
if ids.Contains(store.ID) {
// store2
fmt.Println(store.Name)
}
}
}
まとめ
存在確認をシンプルに実装できるライブラリを紹介しました。
複雑な実装の中で使うとより顕著にスマートさが表れてくるので、気になった方はぜひ使ってみてください。
Discussion