1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24
| // 这一种,定义方式在实例对应方法变调用的时候 ,实例的成员会进行值复制 func (e Employee) String() string { fmt.Printf("输出自己的e的地址 %x\n", unsafe.Pointer(&e.Name)) // c00000a0e8 return fmt.Sprintf("ID :%d-Name:%s-Age:%d", e.Id, e.Name, e.Age) }
// 在通常情况下避免内存拷贝我们使用 这种方式 func (e *Employee) String() string { fmt.Printf("输出自己的e的地址 %x\n", unsafe.Pointer(&e.Name)) // c00000a0e8 return fmt.Sprintf("ID :%d/Name:%s/Age:%d", e.Id, e.Name, e.Age) }
// 测试 String 方法 func TestInit(t *testing.T) { e := Employee{1, "Bob", 20} // 第一种 // t.Log(e.String()) // ID :1-Name:Bob-Age:20 fmt.Printf("输出传进来的e的地址 %x\n", unsafe.Pointer(&e.Name)) // c00000a108
// 第二种 t.Log(e.String()) // ID :1/Name:Bob/Age:20 fmt.Printf("输出传进来的e的地址 %x\n", unsafe.Pointer(&e.Name)) // c00000a0e8
}
|