类型转换和类型断言之间有什么区别?

时间:2013-12-10 12:13:09

标签: go

之间的主要区别是:

  1. v = t.(aType) // type assertion
  2. v = aType(t) // type conversion
  3. 我应该在哪里使用类型断言或类型转换?

1 个答案:

答案 0 :(得分:32)

类型断言断言t(接口类型)实际上是aTypet将是aType;即包含在t界面中的那个。例如。如果您知道var reader io.Reader实际上是*bytes.Buffer,则可以var br *bytes.Buffer = reader.(*bytes.Buffer)

类型转换将一种(非接口)类型转换为另一种类型,例如var x uint8和{64}之类的var id int64 = int64(x)

经验法则:如果必须将具体类型包装到接口中并希望返回具体类型,请使用类型断言(或类型切换)。如果需要将一种具体类型转换为另一种,请使用类型转换。