title: If type T2 is based on type T1, is there any sort of "inheritance" from T1 to T2?
body: <p>If <code>type T2</code> is based on <code>type T1</code>, other than sharing the same data fields, is there any relationship between <code>T1</code> and <code>T2</code>?</p>
  <pre>
  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 )
  }
  </pre>
  <p>My understanding here is lacking</p>
  <ol>
  <li><p>was hoping that <code>T2</code> would inherit <code>T1</code>'s methods, but such is not the case.</p>
  </li>
  <li><p>was expecting <code>T2</code> could be coerced into <code>T1</code>, since it was derived from <code>T1</code></p>
  </li>
  <li><p>was surprised that <code>T1</code> could be coerced into <code>T2</code>, but so it is.</p>
  </li>
  <li><p>it seems that the relationship between <code>T1</code> and <code>T2</code> is completely symmetrical - I cannot find anything that breaks the symmetry despite the fact one is actually derived from the other - or is this an illusion?</p>
  </li>
  </ol>