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