اختبارات

reflect 1

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


package main

import "reflect"

type I interface {
	foo()
	Bar()
}

type T struct {}

func (T) foo() {}
func (T) Bar() {}

func main() {
	var t T
	var i I = t
	var x = reflect.ValueOf(t)
	var y = reflect.ValueOf(&i).Elem()
	println(x.NumMethod(), y.NumMethod())
}

الخيارات:

  • 1 1
  • 1 2
  • 2 1
  • 2 2

الإجابة: 1 2

شغِّله على Go play.

النقطة الأساسية:

  • تعدّ طريقة reflect.Value.NumMethod الطرق غير المصدَّرة (unexported) لأنواع/قيم الواجهات، لكنها تعدّ الطرق المصدَّرة (exported) فقط لأنواع/قيم غير الواجهات.