Golang物件導向

2021-09-29 18:49:04 字數 1993 閱讀 3007

golang中雖然沒有class,但是通過結構體struct依然支援oop(封裝、多型、繼承)。

使用struct封裝物件的屬性。

type person struct

golang同樣支援繼承,不需要extends,只需要在struct中新增父類屬性即可。

type student struct

golang的多型一樣很簡單,只要實現了介面的方法同名方法,就是實現了介面。

type human inte***ce

type chinese struct

type american struct

func

(chinese chinese)

speak

(language string

)func

(american american)

speak

(language string

)

struct結構體變數是值型別,而非其他語言中的引用型別。例:

type person struct

func

(p person)

changename()

func

main()

fmt.

println

("1 : main():"

+p.name)

p.changename()

fmt.

println

("2 : main():"

+p.name)

}輸出結果:1:

main()

:張三changename()

:李四2

:main()

:張三

如果需要在方法中修改值型別屬性的值,則要通過指標(引用變數則可以直接修改)

例如:

func

(p *person)

changename()

此時的輸出結果為:1:

main()

:張三changename()

:李四2

:main()

:李四

通過指標,方法中的修改生效了。

如果struct中定義了引用變數的屬性,則要切記在初始化前呼叫需要make

type person struct

func

main()

// p.score = make(int,10)

fmt.

println

(p.score[0]

)}panic

: runtime error

: index out of range

值拷貝:結構體是值型別,預設是值拷貝

p := person

} p2 := p

fmt.

println

(p) p2.name =

"王五"

fmt.

println

(p)// 修改p2不會影響到p

fmt.

println

(p2)

這種方式修改p2不會影響到p

p := person

} p2 :=

&p fmt.

println

(p) p2.name =

"王五"

fmt.

println

(p)// 修改p2會影響到p

golang 物件導向

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

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