兄弟連go教程(19)資料 - ⾯物件導向

尹成發表於2018-07-04

⾯物件導向三⼤大特徵⾥裡,Go 僅⽀支援封裝,儘管匿名欄位的記憶體佈局和⾏行為類似繼承。沒有
class 關鍵字,沒有繼承、多型等等。
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

尹成老師

QQ77025077 

微信18510341407

所有視訊在尹成學院

www.yinchengxueyuan.com

尹成百度雲請聯絡QQ475318423


相關文章