ماذا يطبع البرنامج التالي؟
package main
var x = *new(*int)
var y *int = nil
func f() interface{} {
return y
}
func main() {
if f() == nil {
if x == nil {
println("A")
} else {
println("B")
}
} else {
if x == nil {
println("C")
} else {
println("D")
}
}
}
الخيارات:
- A
- B
- C
- D
الإجابة: C
شغِّله على Go play.
النقاط الأساسية:
- قيمة الواجهة التي تحمل قيمة ديناميكية غير واجهة تساوي nil ليست واجهة nil. لذا فإن الدالة
fتُرجع دائمًا قيمة واجهة غير nil. - استدعاء الدالة المضمّنة
newيُرجع دائمًا مؤشرًا يشير إلى قيمة صفرية. وهذا يعني أن إلغاء الإشارة إلى المؤشر ينتج قيمة صفرية. والقيمة الصفرية للنوع*intهي nil.