コレクションをレシーバにメソッドを定義することはできない
type User struct {
ID int
Name string
Age int
}
// invalid receiver type []User
func (us []User) IDs() []int {
var ids []int
for _, u := range us {
ids = append(ids, u.ID)
}
return ids
}
そんな時はコレクション型を定義する
package main
import "fmt"
type User struct {
ID int
Name string
Age int
}
type Users []User
func (us Users) IDs() []int {
var ids []int
for _, u := range us {
ids = append(ids, u.ID)
}
return ids
}
func main() {
users := Users{
User{
ID: 1,
Name: "Paul",
Age: 82,
},
User{
ID: 2,
Name: "John",
Age: 40,
},
}
fmt.Println(users.IDs()) // [1 2]
}