Мне нужно привести интерфейс неизвестного непосредственного типа к известному базовому типу.
Пример
package main
import (
"fmt"
"reflect"
)
type A struct {
foo string
}
type B A
func main() {
bS := B{foo: "foo"}
bI := reflect.ValueOf(bS).Interface()
fmt.Println(bI)
aS := bI.(A)
fmt.Println(aS)
}
Когда этот код выполняется, он, понятно, паникует со следующимсообщение
panic: interface conversion: interface {} is main.B, not main.A
В этом примере:
- тип B неизвестен коду, получающему интерфейс bI
- тип B гарантированно является псевдонимом для типаА, который известен.
Редактировать : я не могу использовать псевдонимы типов здесь, потому что это означает, что тип B станет просто еще одним способом записи типа A, поэтому япотерял бы все пользовательские методы, которые я определил для типа B.