ということを知りませんでした。
// You can edit this code! // Click here and start typing. package main import ( "fmt" "slices" ) type X struct { ID int Name string } type xarr []X func main() { x := X{ ID: 1, Name: "taro", } xx := X{ ID: 2, Name: "jiro", } xarr1 := []X{x} fmt.Println(slices.Contains(xarr1, x)) xarr2 := []X{xx} fmt.Println(slices.Contains(xarr2, x)) }
https://go.dev/play/p/usPRZnNm8rK
また、ある特定のフィールドを持つ struct があるかどうかは slices.ContainsFunc
が使えました。
// You can edit this code! // Click here and start typing. package main import ( "fmt" "slices" ) type X struct { ID int Name string } type xarr []X func main() { x := X{ ID: 1, Name: "taro", } xarr := []X{x} fmt.Println(slices.ContainsFunc(xarr, func(e X) bool { return e.Name == "taro" })) }
https://go.dev/play/p/RgBNAISaNDB
slices package での比較処理は線形探索になるので、あまりに大きな slice だとパフォーマンスに影響が出そうですが、結構柔軟に使うことができて便利です。