В чем разница между преобразованием типов и утверждением типа?

В чем основные отличия:

  • v = t.(aType) // type assertion
  • v = aType(t) // type conversion

Где я должен использовать утверждение типа или преобразование типов?

Ответ 1

Утверждение типа утверждает, что t (тип интерфейса) на самом деле является aType и t будет aType; а именно, завернутый в интерфейс t. Например. если вы знаете, что ваш var reader io.Reader на самом деле является *bytes.Buffer, вы можете сделать var br *bytes.Buffer = reader.(*bytes.Buffer).

Преобразование типа преобразует один (неинтерфейсный) тип в другой, например. a var x uint8 to и int64 как var id int64 = int64(x).

Правило большого пальца. Если вам нужно обернуть свой конкретный тип в интерфейс и хотите, чтобы ваш конкретный тип возвращался, используйте утверждение типа (или переключатель типа). Если вам нужно преобразовать один конкретный тип в другое, используйте преобразование типа.