类型断言
题目:
如果 Add() 函数的调用代码为:
1 |
|
则Add函数定义正确的是:
1 |
|
答案:
1 |
|
解析:
在 main
函数中,i
被定义为一个接口类型的变量,它的值是指向变量 a
的指针。当调用 Add
函数时,使用了类型断言 i.(*Integer)
来将接口类型的变量 i
转换为 *Integer
类型。类型断言的语法为 x.(T)
,其中 x
是一个接口类型的表达式,T
是一个类型。类型断言检查 x
的动态类型是否等于 T
,如果检查成功,则返回 x
的动态值,否则会引发运行时恐慌。
在这个例子中,由于 i
的动态类型为 *Integer
,因此类型断言成功,并返回了指向变量 a
的指针。因此,当调用 Add
函数时,可以使用指针接收器 *Integer
(选项 C),也可以使用值接收器 Integer
(选项 A)。在 Go 语言中,当使用指针调用一个值接收器方法时,编译器会自动解引用该指针。
同时,由于 b
是一个值类型的变量,所以在 Add
函数中应该使用值类型的参数 Integer
。因此,选项 B 和 D 都是错误的。
综上所述,正确答案是 A 和 C。
类型断言
http://example.com/2023/04/29/Go每日一题/类型断言/