В чем разница между преобразованием типов и утверждением типа?
В чем основные отличия:
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).
Правило большого пальца. Если вам нужно обернуть свой конкретный тип в интерфейс и хотите, чтобы ваш конкретный тип возвращался, используйте утверждение типа (или переключатель типа). Если вам нужно преобразовать один конкретный тип в другое, используйте преобразование типа.