如果乙個函式有接收者,那麼這個函式就叫方法。
go 語言裡有兩種型別的接收者:值接收者和指標接收者。如下:
// user 在程式裡定義乙個使用者型別
type user struct
// notify 使用值接收者實現了乙個方法
func (u user) notify()
// changeemail 使用指標接收者實現了乙個方法
func (u *user) changeemail(email string)
有兩個概念:呼叫者和接收者,這兩者都可以是值和指標。
1 使用值接收者宣告方法,呼叫時會使用這個值的乙個副本來執行:
1.1 使用值來呼叫:
bill := user
bill.notify()
notify方法會接收到乙個bill的副本,然後進行操作。
1.2 使用指標來呼叫:
lisa := &user
lisa.notify()
notify 操作的是乙個副本,只不過這次操作的是從 lisa 指標指向的值的副本。go 編譯器為了支援這種方法呼叫背後做的事情就 是將指標解引用為值。實際上執行的類似於:
(*lisa).notify()
2 使用指標接收者,方法會共享呼叫方法時接收者所指向的值:
2.1 使用指標來呼叫:
lisa := &user
// 指向 user 型別值的指標可以用來呼叫
// 使用指標接收者宣告的方法
lisa.changeemail("[email protected]")
一旦 changeemail 呼叫返回,這個呼叫對值做的修改也會反映在 lisa指標所指向的值上。這是因為 changeemail 方法使用了指 針接收者。
2.3 使用值來呼叫:
bill := user
// user 型別的值可以用來呼叫
// 使用指標接收者宣告的方法
bill.changeemail("[email protected]")
go 語言再一次對值做了調整,使之符合函式的接收者,進行呼叫,也就是先引用 bill 值得到乙個指標,這樣這個指標就能夠 匹 配方法的接收者型別,再進行呼叫。實際上執行的類似於:
(&bill).changeemail ("[email protected]")
總結一下,值接收者使用值的副本來呼叫方法,而指標接受者使用實際值來呼叫方法。具體需要用什麼來作為使用者就看你的功能裡面需要什麼來做選擇了。 go語言學習備忘 併發
並行是讓不同的 片段同時在不同的物理處理器上執行。並行的關鍵是同時做很多事情,而併發是指同時管理很多事情,這些事情可能只做了一半就被暫停去做別的事情了。在很多情況下,併發的效果比並行好,因為作業系統和硬體的總資源一般很少,但能支援系統同時做很多事情。這種 使用較少的資源做更多的事情 的哲學,也是指導...
go 方法 摘自go語言學習筆記
如何選擇方法的receiver型別 要修改例項狀態,用 t 無須修改狀態的小物件或固定值,建議用t 大物件建議用 t,以減少複製成本 引用型別 字串 函式等指標包裝物件,直接用t 若包含mutex等同步字段,用 t,避免因複製造成鎖操作無效 其他無法確定的情況,都用 t 方法集 型別t方法集包含所有...
GO語言學習
sudo apt get install golang但是用ubuntu的庫安裝有幾個不好的地方 因此建議不要使用ubuntu的庫安裝golang環境 golang社群的安裝指導 wget tar c usr local zxf go1.6.2.linux amd64.tar.gz設定環境變數,修改...