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...