go 方法 摘自go語言學習筆記

2021-10-06 06:06:47 字數 1112 閱讀 7153

如何選擇方法的receiver型別:要修改例項狀態,用 *t;無須修改狀態的小物件或固定值,建議用t;大物件建議用 *t,以減少複製成本;引用型別、字串、函式等指標包裝物件,直接用t;若包含mutex等同步字段,用 *t,避免因複製造成鎖操作無效;其他無法確定的情況,都用 *t

方法集:型別t方法集包含所有receiver t方法;型別*t方法集包含所有receiver t + *t 方法;匿名嵌入s,t方法集包含所有receiver s方法;匿名嵌入 *s,t方法集包含所有receiver s + *s方法;匿名嵌入 s 或 *s,*t方法集包含所有receiver s + *s方法

方法和函式一樣,除直接呼叫外,還可賦值給變數,或作為引數傳遞。依照具體引用方式的不同,可分為expression和value兩種狀態

3.1 通過型別引用的method expression會被還原為普通函式樣式,receiver是第一引數,呼叫時必須顯式傳參

type n int

func

(n n)

test()

func

main()

// 輸出:

// main.n:0xc82000a140,25

// test.n:0xc82000a158,25

// test.n:0xc82000a168,25

// 儘管 *n方法集包裝的test方法receiver型別不同,但是編譯器會保證按原定義型別拷貝傳值

只能為當前包內命名型別定義方法

可以像字段成員那樣訪問匿名字段方法,編譯器負責查詢

type user struct

type manager struct

func

(self *user)

tostring()

string

func

main()

} fmt.

printf

("manager: %p\n"

,&m)

fmt.

println

(m.tostring()

)}// manager: 0x2102281b0

// user : 0x2102281b0, &

go 型別 摘自go語言學習筆記

從計算機實現角度來看,變數是一段或多段用來儲存資料的記憶體 go變數總是有固定的資料型別,型別決定了變數記憶體的長度和儲存格式 通過型別轉換或指標操作,我們可用不同方式修改變數值,但這並不意味著改變了變數型別 因為記憶體分配發生在執行期,所以在編碼階段我們用乙個易於閱讀的名字來表示這段記憶體。實際上...

7 1 介面摘自《go語言學習筆記》

1,介面實現機制 只要目標方法集內包含介面宣告的全部方法,就被視為實現了該介面,無需做顯示宣告。目標型別可以實現多個介面。2,內部實現,介面自身也是一種結構型別 type iface struct不能有欄位 不能定義自己的方法。只能宣告方法,不能實現。可嵌入其它介面型別。3,介面通常以er作為介面字...

go語言學習筆記

type info struct func main fmt.println info1 data,json.marshal info1 fmt.println string data 輸出 這裡要特別注意的是 json 冒號後面和雙引號之間千萬不要有空格!被坑慘了 go語言 import的包的前面...