- type User struct {
- id int
- name string
- }
- type Manager struct {
- User
- title string
- }
- m := Manager{User{1, "Tom"}, "Administrator"}
- // var u User = m // Error: cannot use m (type Manager) as type User in assignment
- // 没有继承,⾃自然也不会有多态。
- var u User = m.User // 同类型拷⻉贝。
- 内存布局和 C struct 相同,没有任何附加的 object 信息。
- |<-------- User:24 ------->|<-- title:16 -->|
- +--------+-----------+------------+ +---------------+
- m | 1 | string | string | | Administrator | [n]byte
- +--------+-----------+------------+ +---------------+
- | | |
- | +--->>>------------------->>>--------+
- |
- +--->>>----------------------------------->>>-----+
- |
- +--->>>----------------------------------->>>-+ |
- | | |
- +--------+-----------+ +---------+
- u | 1 | string | | Tom | [n]byte
- +--------+-----------+ +---------+
- |<- id:8 -->|<- name:16 -->|
可⽤用 unsafe 包相关函数输出内存地址信息。
- m : 0x2102271b0, size: 40, align: 8
- m.id : 0x2102271b0, offset: 0
- m.name : 0x2102271b8, offset: 8
- m.title: 0x2102271c8, offset: 24