go 的指標、類別與方法
在前面的內容分別跟大家分享 go 的指標、類別與方法,讓大家瞭解如何在 go 語言中使用指標、類別與方法撰寫商業邏輯,不過光瞭解指標、類別與方法的宣告實作與使用很容易造成誤用,還有分別介紹有沒有提及如何搭配使用,所以本篇要針對這兩點來說明指標的優缺點,還有如何撰寫指標、類別的方法。
指標、類別與方法
在前幾篇文章已經介紹方法、介面、類別和指標,這篇要將這些內容混在一起說明指標的優缺點跟指標、類別的方法如何實作。
指標的優缺點
前一篇有進一步說明指標的概念,並且也說明一般變數的賦值是將原來的變數複製到新的一個記憶體空間,所以如此將會造成記憶體空間耗用,試想每將變數傳遞到一個方法內就會產生一個複製,如果有注意這樣點可以節省記憶體空間。
不過這樣能節省多少記憶體空間呢,其實筆者沒辦法說他是多還少,不過使用指標所面臨的是若是傳遞的變數是 nil
則會造成程式的異常中斷,甚至於是整個服務的停擺。
聽起來指標是個恐怖的東西,所以不要用他好了,但是如果抱持這種心態將沒有辦法再方法內變更傳入參數的屬性了。
說到這裡相信讀者們心裡應該有個底關於指標要怎麼用了,所以接下來要說明 下如何撰寫類別、指標的方法。
指標、類別的方法
在說明指標、類別的方法前請大家先看看下列例子
import "fmt"
func Pos(v Vertex) {
fmt.Println(v)
}
這是之前寫過的方法,他的使用方式是將變數傳入方法之中,不過這跟筆者提到的類別、指標的方法有什麼關係呢,因為 go 也可以為類別、指標撰寫方法,請大家看一下下列例子再跟上面的例子比較一下
import "fmt"
func (v Vertex) Pos(){
fmt.Println(v)
}
第二個例子就是我們為Vertex所撰寫專屬於他的方法,然而他的用法跟一般全域的方法不同,請大家看看以下這個完整的例子
package main
import "fmt"
type Vertex struct {
X int
Y int
}
func main() {
var p2 *Vertex
p := Vertex{1,1}
p.Pos()
p2 = &p
p2.X = 2
p.Pos()
}
func (v Vertex) Pos() {
fmt.Println(v)
}
上面的例子就是如何使用指標、類別的方法。
結論
這篇文章針對指標、類別與方法更進一步的說明其優缺點已經如何應對,最後再說明指標、類別如何跟方法搭配使用。