golang 物件導向

2021-06-14 19:59:36 字數 1421 閱讀 8210

method的語法如下:

func (r receivertype) funcname(parameters) (results)
下面我們用最開始的例子用method來實現:

package main

import (

"fmt"

"math"

)type rectangle struct

type circle struct

func (r rectangle) area() float64

func (c circle) area() float64

func main()

r2 := rectangle

c1 := circle

c2 := circle

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的時候重要注意幾點

圖示如下:

圖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 int

type money float32

type months map[string]int

m := months

golang 物件導向

package main golang 物件導向 import fmt type相當於 c c 的 typedef拉 type myint int64 type person struct 繼承 匿名欄位person,相當於c c 的繼承拉,student就擁有了person所有的屬性拉,其實c c...

golang 物件導向

method的語法如下 func r receivertype funcname parameters results 下面我們用最開始的例子用method來實現 package main import fmt math type rectangle struct type circle struc...

Golang物件導向

golang中雖然沒有class,但是通過結構體struct依然支援oop 封裝 多型 繼承 使用struct封裝物件的屬性。type person struct golang同樣支援繼承,不需要extends,只需要在struct中新增父類屬性即可。type student struct gola...