В Go, если тип T2 основан на типе T1, существует ли какое-либо «наследование» от T1 к T2?

Если тип 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 )
}

Насколько я понимаю, здесь отсутствует

  1. надеялся, что T2 унаследует методы T1 , но это не так.

  2. ожидал T2 можно было принудительно преобразовать в T1 , поскольку он был получен из T1

  3. был удивлен тем, что T1 мог быть преобразован в T2 , но так оно и есть.

  4. кажется, что связь между T1 и T2 полностью симметрична - я не могу найти ничего, что нарушает симметрию, несмотря на то, что она фактически получена от другого - или это иллюзия?

(ПРИМЕЧАНИЕ: я не критикую или осуждаю - я полностью уважаю принятые решения - просто проверяю, что понимаю, что для меня является контр-интуитивным ve - уверен, что я не единственный!)

8
задан cc young 26 June 2011 в 13:24
поделиться