关于方法的一些知识点:

    1. type T struct {
    2. thing int
    3. }
    4. func (t *T)change() {
    5. t.thing = 1
    6. }
    7. func (t T)Write() string {
    8. return fmt.Sprint(t)
    9. }
    10. func () {
    11. t1 := T{0} //t1是值类型
    12. t1.change()//值类型调用指针方法
    13. fmt.Println(t1.Write())
    14. t2 := &{0}//t2是指向T的一个指针
    15. t2.change()
    16. fmt.Println(t2.Write())//指针调用值方法
    17. }
    18. /*
    19. {1}
    20. {1}
    21. */

    无论结构体接收者是值类型或是指针,都可以互相调用.
    t1.change() 替代了 (&t1).change()
    t2.Write() 替代了 (*t2).Write()

    对于类型T,如果*T上存在方法 Meth(),并且 t 是这个类型的变量,那么 t.Meth() 会被自动转换为 (&t).Meth()