اختبارات

التضمين 1

ماذا يطبع البرنامج التالي؟


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.

يرجى قراءة تضمين الأنواع لمزيد من الشرح التفصيلي.