В вашем коде v
- это конкретный тип *FILE
, а для утверждения типа в форме i.(T)
, i
должно быть interface
, а T
- это тип / интерфейс, поэтому ваш код компилируется error
Это должно делать то, что вы, но не вызовет ошибку времени выполнения, потому что os.Stdout
удовлетворяет io.ReadWriter
interface
var v interface{} = os.Stdout
v2 := v.(io.ReadWriter)
, при каких условиях он не будет работать во время выполнения
Если интерфейс i
не поддерживает / удовлетворяет требованию для типа T
, оператор вызовет pani c.
Например, эти операторы вызовут pani c, потому что os.Stdout
с типом *FILE
не удовлетворяет требованиям для io.ByteScanner
var v interface{} = os.Stdout
v2 := v.(io.ByteScanner)