ماذا يطبع البرنامج التالي؟
package main
type A struct {
g int
}
func (A) m() int {
return 1
}
type B int
func (B) g() {}
func (B) f() {}
type C struct{
A
B
}
func (C) m() int {
return 9
}
func main() {
var c interface{} = C{}
_, bf := c.(interface{f()})
_, bg := c.(interface{g()})
i := c.(interface{m() int})
println(bf, bg, i.m())
}
الخيارات:
- false false 9
- false true 9
- true false 9
- true true 9
- false false 1
- false true 1
- true false 1
- true true 1
الإجابة: true false 9
شغِّله على Go play.
النقاط الأساسية:
- يتعارض الحقل
C.A.gوالطريقةC.B.g، لذا لا يُرقَّى أي منهما. - تُرقَّى الطريقة
C.B.fباسمC.f. - تتجاوز الطريقة
C.mالطريقةC.A.m.
يرجى قراءة تضمين الأنواع لمزيد من الشرح التفصيلي.