在某些情況下,我們要需要宣告(定義)方法。比如person結構體:除了有一些欄位外( 年齡,姓名..),person結構體還有一些行為比如:可以說話、跑步..,通過學習,還可以做算術題。這時就要用方法才能完成。
golang中的方法是作用在指定的資料型別上的(即:和指定的資料型別繫結),因此自定義型別,都可以有方法,而不僅僅是struct
1、語法
func (recevier type) methodname(引數列表) (返回值列表)
2、引數說明:
1) 引數列表:表示方法輸入
2) recevier type : 表示這個方法和type這個型別進行繫結,或者說該方法作用於type型別
3) receiver type : type可以是結構體,也可以其它的自定義型別
4) receiver : 就是type型別的乙個變數(例項),比如 :person結構體 的乙個變數(例項)
5) 返回值列表:表示返回的值,可以多個
6) 方法主體:表示為了實現某一功能**塊
7) return 語句不是必須的。
3、案列**:
type a struct
func (a a) test()
func structmethoddemo4()
案例**說明:
1) type a struct :說明a是乙個結構體
2) func (a a) test() : 說明 test() 是乙個方法, 和 a 結構體型別繫結/關聯/ test方法作用在a結構體
三、快速入門的案列
/*結構體方法*/
type d struct
func (a d) test()
func structmethoddemo4()
四、方法的呼叫和傳參機制原理:(重要!)方法的呼叫和傳參機制和函式基本一樣,不一樣的地方是方法呼叫時,會將呼叫方法的變數,當做實參也傳遞給方法。
五、方法注意事項和細節討論
1、結構體型別是值型別,在方法呼叫中,遵守值型別的傳遞機制,是值拷貝傳遞方式
2、如程式設計師希望在方法中,修改結構體變數的值,可以通過結構體指標的方式來處理[案例+示意圖]
type person struct
//給person關聯乙個方法
//修改結構體變數的值,可以通過結構體指標的方式來處理
func (p *person) test()
//如程式設計師希望在方法中,修改結構體變數的值,可以通過結構體指標的方式來處理
p := person
fmt.printf("main的p的位址=%p\n", &p)
//因為 test() 是和 *person繫結
//標準的呼叫方式
(&p).test()
fmt.printf("p的值=%v\n", p)
3、 golang中的方法作用在指定的資料型別上的(即:和指定的資料型別繫結),因此自定義型別,都可以有方法,而不僅僅是struct, 比如int , float32等都可以有方法[案例]
/*
golang中的方法作用在指定的資料型別上的(即:和指定的資料型別繫結),因此自定義型別,都可以有方法,
而不僅僅是struct, 比如int , float32等都可以有方法
*/type fl float64
func (f fl) test()
func (f *fl) test1()
func structmethoddemo1()
4、方法的訪問範圍控制的規則,和函式一樣。方法名首字母小寫,只能在本包訪問,方法首字母大寫,可以在本包和其它包訪問。
5、 如果乙個型別實現了string() string 這個方法,那麼fmt.println缺省會呼叫這個變數的string()進行輸出。
type car struct
//關聯乙個方法string方法,直接輸出該結構體變數時,就會自動呼叫該方法.
func (car *car) string() string
//如果乙個型別實現了string() string 這個方法,那麼fmt.println缺省會呼叫這個變數的string()進行輸出
car := car
fmt.println(car)
Go之物件導向程式設計之繼承
golang的繼承與j a和php不太一樣,如php繼承需要用到extends關鍵字,而golang使用的是匿名繼承或有名繼承。二 簡單舉例 package main import fmt type brand struct type goods struct func main 結果 go run...
Go語言 物件導向程式設計
go語言的語言設計非常的簡潔,因為,go語言並沒有物件導向的概念,因此go語言中沒有物件導向的一些概念,例如 封裝 繼承 多型,虛函式 建構函式,this指標等 儘管go語言中沒有封裝 繼承 多型,但同樣也可以實現相應的功能。封裝 通過方法進行實現 繼承 通過匿名字段實現 多型 通過介面實現 方法也...
第十二周部落格之物件導向程式設計3
封裝 封裝有兩方面含義 1.將資料 屬性 和行為 方法 包裝到類物件中。在方法內部對屬性進行操作,在類物件的外部呼叫方法。這樣,無需關心方法內部的具體實現細節,從而隔離了複雜度。2.在類物件內部通過訪問控制把某些屬性和方法隱藏起來,不允許在類物件外部直接訪問,而是在類物件的內部對外提供公開的介面方法...