🧇
【Go】go-funkのFindメソッドの使い方
概要
go-funkは、GolangFilterやMapなどの関数が、手軽に使えるライブラリです。指定した要素を一つ取得するFindメソッドも用意されていますが、使い方等少し迷う部分があったので、今回少しメモ書きします。
なお、前提とするgo-funkのバージョンはv0.9.2
です。
Findメソッドの概要
こちらのドキュメントにメソッドの一覧が記載されていますが、Find
メソッドはinterface型で値をやり取りします。また、FindInt
のように型名が指定されているメソッドも用意されていて、これを使用するとその型で値をやり取りできます。
なお、型名が指定されている場合、2つ目の返り値に値が見つかったかのフラグが設定されます。普通のFindでは返り値がinterfaceのみなので、これがnilかどうかで判断します。
実装サンプル
int型の配列を用意して、Find
とFindInt
の双方で実行した結果をサンプルとして記載します。
package main
import "github.com/thoas/go-funk"
func main() {
numbers := []int{1, 2, 3, 4}
// Findメソッドだと返り値がinterface型
// 見つからない場合はnil
res1 := funk.Find(numbers, func(x int) bool {
return x%10 == 0
})
if res1 == nil {
println("nil") // nil
}
// 見つかった場合はキャストして値を取り出す
res2 := funk.Find(numbers, func(x int) bool {
return x%2 == 0
})
if res2 != nil {
println(res2.(int)) // 2
}
// Find+型のメソッドだと結果が、二つ目の返り値に設定される
// 見つからなかった場合は二つ目の返り値がfalse
res3, success3 := funk.FindInt(numbers, func(x int) bool {
return x%10 == 0
})
println(success3) // false
println(res3) // 0が設定される
// 見つかった場合は二つ目の返り値がtrue
res4, success4 := funk.FindInt(numbers, func(x int) bool {
return x%2 == 0
})
println(success4) // true
println(res4) // 2が設定される
}
Discussion