這是一個建立於 的文章,其中的資訊可能已經有所發展或是發生改變。
【 聲明:著作權,歡迎轉載,請勿用於商業用途。 聯絡信箱:feixiaoxing @163.com】
有過C++語言學習經曆的朋友都知道,物件導向主要包括了三個基本特徵:封裝、繼承和多態。封裝,就是指啟動並執行資料和函數綁定在一起,C++中主要是通過this指標來完成的;繼承,就是指class之間可以相互繼承屬性和函數;多態,主要就是用統一的介面來處理通用的邏輯,每個class只需要按照介面實現自己的回呼函數就可以了。
作為集大成者的go語言,自然不會在物件導向上面無所作為。相比較C++、java、C#等物件導向語言而言,它的物件導向更簡單,也更容易理解。下面,我們不妨用三個簡單的例子來說明一下go語言下的物件導向是什麼樣的。
封裝特性,
package mainimport "fmt"type data struct {val int}func (p_data* data)set(num int) {p_data.val = num}func (p_data* data)show() {fmt.Println(p_data.val)}func main() {p_data := &data{4}p_data.set(5)p_data.show()}
繼承特性,
package mainimport "fmt"type parent struct {val int}type child struct {parentnum int}func main() {var c childc = child{parent{1}, 2}fmt.Println(c.num)fmt.Println(c.val)}
多態特性,
package mainimport "fmt"type act interface {write()}type xiaoming struct {}type xiaofang struct {}func (xm *xiaoming) write() {fmt.Println("xiaoming write")}func (xf *xiaofang) write() {fmt.Println("xiaofang write")}func main() {var w act;xm := xiaoming{}xf := xiaofang{}w = &xmw.write()w = &xfw.write()}
在物件導向上,go語言表現得更加簡潔和直接。一方面,這來自與語言設計者對物件導向透徹的理解;另一方面,我想這也來自於google設計者對過往經驗的總結。個人覺得這幾個特性還是非常有意思的,有興趣的朋友可以自己嘗試一下。
著作權聲明:本文為博主原創文章,未經博主允許不得轉載。