之间的主要区别是:
v = t.(aType) // type assertion
v = aType(t) // type conversion
我应该在哪里使用类型断言或类型转换?
答案 0 :(得分:32)
类型断言断言t
(接口类型)实际上是aType
而t
将是aType
;即包含在t
界面中的那个。例如。如果您知道var reader io.Reader
实际上是*bytes.Buffer
,则可以var br *bytes.Buffer = reader.(*bytes.Buffer)
。
类型转换将一种(非接口)类型转换为另一种类型,例如var x uint8
和{64}之类的var id int64 = int64(x)
。
经验法则:如果必须将具体类型包装到接口中并希望返回具体类型,请使用类型断言(或类型切换)。如果需要将一种具体类型转换为另一种,请使用类型转换。