package main // Test of promotion of methods of an interface embedded within a // struct. In particular, this test exercises that the correct // method is called. type I interface { one() int two() string } type S struct { I } type impl struct{} func (impl) one() int { return 1 } func (impl) two() string { return "two" } func main() { var s S s.I = impl{} if one := s.I.one(); one != 1 { panic(one) } if one := s.one(); one != 1 { panic(one) } closOne := s.I.one if one := closOne(); one != 1 { panic(one) } closOne = s.one if one := closOne(); one != 1 { panic(one) } if two := s.I.two(); two != "two" { panic(two) } if two := s.two(); two != "two" { panic(two) } closTwo := s.I.two if two := closTwo(); two != "two" { panic(two) } closTwo = s.two if two := closTwo(); two != "two" { panic(two) } }