Если тип T2
основан на типе T1
, кроме использования одних и тех же полей данных, существует ли какая-либо связь между T1
и T2
?
package main import "fmt" type T1 struct { s string } func (v *T1) F1() string { return v.s } type T2 T1 func (v *T2) F2() string { return v.s } func main() { var t1 = T1{ "xyz" } var t2 = T2{ "pdq" } s0 := t2.F1() // error - expected ok s1 := ((*T1)(&t2)).F1() // ok - expected s2 := ((*T2)(&t1)).F2() // ok - not expected fmt.Println( s0, s1, s2 ) }
Насколько я понимаю, здесь отсутствует
надеялся, что T2
унаследует методы T1
, но это не так.
ожидал T2
можно было принудительно преобразовать в T1
, поскольку он был получен из T1
был удивлен тем, что T1
мог быть преобразован в T2
, но так оно и есть.
кажется, что связь между T1
и T2
полностью симметрична - я не могу найти ничего, что нарушает симметрию, несмотря на то, что она фактически получена от другого - или это иллюзия?
(ПРИМЕЧАНИЕ: я не критикую или осуждаю - я полностью уважаю принятые решения - просто проверяю, что понимаю, что для меня является контр-интуитивным ve - уверен, что я не единственный!)