ماذا يطبع البرنامج التالي؟
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) فقط لأنواع/قيم غير الواجهات.