前段時間,我們實驗室用go作為后臺開發語言開發了一個web項目,由于這是自己第一次使用go語言進行開發,在開發過程中,一味著追求完成任務,在編碼的時候沒有太注重性能,雖然勉強實現了功能,但是對go語言的理解還是比較淺顯的。下面來談談自己對go語言中函數與方法的理解。
創新互聯公司主要從事成都做網站、成都網站制作、成都外貿網站建設、網頁設計、企業做網站、公司建網站等業務。立足成都服務孝昌,10余年網站建設經驗,價格優惠、服務專業,歡迎來電咨詢建站服務:13518219792
普通函數:
go函數可以返回多個值
值傳遞: 值傳遞是指在調用函數時將實際參數復制一份傳遞到函數中,這樣函數中如果對參數進行修改,將不會影響到實際參數
引用傳遞: 引用傳遞是指在調用函數將實際參數的地址傳遞到函數中,那么在函數中對參數進行的修改,將影響到實際參數。
一般來說go語言函數的 接收者(也就是形參)一般放在函數名后面 ,不能將指針類型的數據直接傳遞,也就是說函數形參如果是值類型,調用者必須使用值作為實參過來,如果函數形參是指針類型,則函數調用者需使用指針作為實參來調用。
普通方法:
接收者是在func關鍵字后面,而不是在函數名稱后面,接收者可以是自己定義的一個類型,這個類型可以是struct、interface,一個方法就是一個包含了接收者的函數,接收者可以是命名類型或者是結構體類型的一個值或者是一個指針。
下面是一個例子來說明方法和函數的區別(重點)
下面定義一個結構體類型和該類型的一個方法:
復制代碼代碼如下:
type User struct {
Name string
Email string
}
func (u User) Notify() error
首先我們定義了一個叫做 User 的結構體類型,然后定義了一個該類型的方法叫做 Notify,該方法的接受者是一個 User 類型的值。要調用 Notify 方法我們需要一個 User 類型的值或者指針:
復制代碼代碼如下:
// User 類型的值可以調用接受者是值的方法
damon := User{"AriesDevil", "ariesdevil@xxoo.com"}
damon.Notify()
// User 類型的指針同樣可以調用接受者是值的方法
alimon := User{"A-limon", "alimon@ooxx.com"}
alimon.Notify()
go語言沒有面向對象的特性,也沒有類對象的概念。但是,可以使用結構體來模擬這些特性,我們都知道面向對象里面有類方法等概念。我們也可以聲明一些方法,屬于某個結構體。
Go中的方法,是一種特殊的函數,定義域struct之上(與struct關聯、綁定),被稱為struct的接受者(receiver)。通俗的講,方法就是有接收者的函數。
語法格式如下:
mytype:定義一個結構體
recv:接受該方法的結構體(receiver)
my_method:方法名稱
para:參數列表
return_type:返回值類型
從語法格式可以看出,一個方法和一個函數非常相似,多了一個接受類型。
實例
運行結果
網站名稱:go語言方法接受者 go語言的defer
瀏覽地址:http://vcdvsql.cn/article12/doieddc.html
成都網站建設公司_創新互聯,為您提供企業建站、網站營銷、動態網站、軟件開發、域名注冊、品牌網站制作
聲明:本網站發布的內容(圖片、視頻和文字)以用戶投稿、用戶轉載內容為主,如果涉及侵權請盡快告知,我們將會在第一時間刪除。文章觀點不代表本網站立場,如需處理請聯系客服。電話:028-86922220;郵箱:631063699@qq.com。內容未經允許不得轉載,或轉載時需注明來源: 創新互聯