Go 类型转换和类型断言之间有什么区别?
以下各项之间的主要区别是什么:Go 类型转换和类型断言之间有什么区别?,go,Go,以下各项之间的主要区别是什么: v=t.(aType)//类型断言 v=aType(t)//类型转换 我应该在哪里使用类型断言或类型转换?类型断言断言t(接口类型)实际上是aType,而t将是aType;即包装在t界面中的一个。例如,如果您知道您的var-reader io.reader实际上是一个*字节.Buffer,您可以执行var-br*bytes.Buffer=读取器。(*bytes.Buffer) 类型转换将一种(非接口)类型转换为另一种类型,例如Avar x uint8to和int6
v=t.(aType)//类型断言
v=aType(t)//类型转换
我应该在哪里使用类型断言或类型转换?类型断言断言
t
(接口类型)实际上是aType
,而t
将是aType
;即包装在t
界面中的一个。例如,如果您知道您的var-reader io.reader
实际上是一个*字节.Buffer
,您可以执行var-br*bytes.Buffer=读取器。(*bytes.Buffer)
类型转换将一种(非接口)类型转换为另一种类型,例如Avar x uint8
to和int64 likevar id int64=int64(x)
经验法则:如果您必须将具体类型包装到接口中,并希望返回具体类型,请使用类型断言(或类型开关)。如果您需要将一种具体类型转换为另一种类型,请使用类型转换。“t将是一种aType”-您能详细说明一下吗<代码>t没有修改吗?@nemo我想他会说
v
,不是t
。@LucianoQ:不,是t
不是v
@nemo:Not
不会被类型断言或类型转换修改。我强烈推荐Go之旅和之后的语言规范。@Volker谢谢你的推荐,这是一次很好的演讲!然而,我仍然认为你的意思是v
,而不是t
t
在这种情况下将是某种接口类型,例如interface{}
,在t
上断言后,结果值v
将是aType
@nemo类型。不,我的意思是t的动态类型是aType。v的类型是无趣的。也有点离题,但值得注意的是,强制转换通常意味着某种运行时支持,但断言纯粹是一种编译时构造,是一种提供编译器提示的方法,说明您希望如何分析代码。