interface ISomething { value int get_value_implemented(s &ISomething) int } struct SomethingImplemented { value int } fn (s SomethingImplemented) get_value_implemented(s_ &ISomething) int { return s.value } fn get_value_implemented(s &ISomething) int { return s.value } struct SomethingNotImplemented { value int } fn get_value_not_implemented(s &SomethingNotImplemented) int { return s.value } fn main() { s1 := &SomethingImplemented{ value: 1 } // fn call _ := get_value_implemented(&s1) // method call _ := s1.get_value_implemented(&s1) s2 := &SomethingNotImplemented{ value: 1 } // fn call _ := get_value_not_implemented(&s2) }