github.com/traefik/yaegi@v0.15.1/_test/issue-1326.go (about) 1 package main 2 3 type Option interface { 4 apply(*T) 5 } 6 7 type T struct { 8 s string 9 } 10 11 type opt struct { 12 name string 13 } 14 15 func (o *opt) apply(t *T) { 16 println(o.name) 17 } 18 19 func BuildOptions() []Option { 20 return []Option{ 21 &opt{"opt1"}, 22 &opt{"opt2"}, 23 } 24 } 25 26 func NewT(name string, options ...Option) *T { 27 t := &T{name} 28 for _, opt := range options { 29 opt.apply(t) 30 } 31 return t 32 } 33 34 func main() { 35 t := NewT("hello", BuildOptions()...) 36 println(t.s) 37 } 38 39 // Output: 40 // opt1 41 // opt2 42 // hello