Что основные отличия:В чем разница между преобразованием типов и утверждением типа?
v = t.(aType) // type assertion
v = aType(t) // type conversion
Где я должен использовать утверждение типа или преобразование типа?
Что основные отличия:В чем разница между преобразованием типов и утверждением типа?
v = t.(aType) // type assertion
v = aType(t) // type conversion
Где я должен использовать утверждение типа или преобразование типа?
Утверждение типа утверждает, что 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)
.
Правило большого пальца:: Если вам нужно обернуть свой конкретный тип интерфейсом и хотите, чтобы ваш конкретный тип возвращался, используйте утверждение типа (или переключатель типа). Если вам нужно преобразовать один конкретный тип в другое, используйте преобразование типа.
"и t будет aType" - Можете ли вы подробно остановиться на этом? 't' не изменяется? – nemo
@ nemo Я думаю, он сказал бы 'v', а не' t' –
@LucianoQ: Нет, это 't' не' v'. @nemo: Нет 't' не изменяется с помощью утверждения типа или преобразования типа. Я настоятельно рекомендую Tour of Go и спецификацию языка. – Volker