前のやつ
の続きっていうかメモ
/***** * Go言語で型変数を受けるCollectionみたいなの *****/ package main import "fmt" import "reflect" type E struct { element interface{} score int } func (e *E) Elem() interface{} { return e.element } type Collection struct { representative interface{} elements []E } func (c *Collection) Push(v interface{}) (e error) { if reflect.TypeOf(c.representative) != reflect.TypeOf(v) { return fmt.Errorf("%sはこのコレクションの型変数に一致しません", reflect.TypeOf(v).String()) } c.elements = append(c.elements, E{element:v}) return } func (c *Collection) Count() int { return len(c.elements) } func (c *Collection) Find(index int) (el E, err error) { if index < c.Count() { el = c.elements[index] return } err = fmt.Errorf("%d番目の要素は見つかりません", index) return } func NewCollectionOf(v interface{}) *Collection { return &Collection{ representative: v, } } type Person struct { Name string } func (p *Person) Greet() { fmt.Printf("Hi, I'm %s.", p.Name) } func main() { collection := NewCollectionOf(&Person{}) collection.Push(&Person{"田井中律"}) collection.Push(&Person{"秋山澪"}) fmt.Println(collection.Push("平沢唯")) fmt.Println(collection.Count()) mio, e := collection.Find(3) fmt.Println(mio, e) mio, e = collection.Find(1) fmt.Println(mio, e) mio.Elem().(*Person).Greet() }
じっこうけっか
stringはこのコレクションの型変数に一致しません 2 {<nil> 0} 3番目の要素は見つかりません {0x10500178 0} <nil> Hi, I'm 秋山澪.
はい。DRYな備忘録