golang 物件導向

來源:互聯網
上載者:User
這是一個建立於 的文章,其中的資訊可能已經有所發展或是發生改變。

method的文法如下:

func (r ReceiverType) funcName(parameters) (results)

下面我們用最開始的例子用method來實現:

package mainimport (    "fmt"    "math")type Rectangle struct {    width, height float64}type Circle struct {    radius float64}func (r Rectangle) area() float64 {    return r.width*r.height}func (c Circle) area() float64 {    return c.radius * c.radius * math.Pi}func main() {    r1 := Rectangle{12, 2}    r2 := Rectangle{9, 4}    c1 := Circle{10}    c2 := Circle{25}    fmt.Println("Area of r1 is: ", r1.area())    fmt.Println("Area of r2 is: ", r2.area())    fmt.Println("Area of c1 is: ", c1.area())    fmt.Println("Area of c2 is: ", c2.area())}

在使用method的時候重要注意幾點

  • 雖然method的名字一模一樣,但是如果接收者不一樣,那麼method就不一樣
  • method裡面可以訪問接收者的欄位
  • 調用method通過.訪問,就像struct裡面訪問欄位一樣

圖示如下:

圖2.9 不同struct的method不同

在上例,method area() 分別屬於Rectangle和Circle, 於是他們的 Receiver 就變成了Rectangle 和 Circle, 或者說,這個area()方法 是由 Rectangle/Circle 發出的。

值得說明的一點是,圖示中method用虛線標出,意思是此處方法的Receiver是以值傳遞,而非引用傳遞,是的,Receiver還可以是指標, 兩者的差別在於, 指標作為Receiver會對執行個體對象的內容發生操作,而普通類型作為Receiver僅僅是以副本作為操作對象,並不對原執行個體對象發生操作。後文對此會有詳細論述。

那是不是method只能作用在struct上面呢?當然不是咯,他可以定義在任何你自訂的類型、內建類型、struct等各種類型上面。這裡你是不是有點迷糊了,什麼叫自訂類型,自訂類型不就是struct嘛,不是這樣的哦,struct只是自訂類型裡面一種比較特殊的類型而已,還有其他自訂類型申明,可以通過如下這樣的申明來實現。

type typeName typeLiteral

請看下面這個申明自訂類型的代碼

type ages inttype money float32type months map[string]intm := months {    "January":31,    "February":28,    ...    "December":31,}

相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.