Go語言中,一個方法就是一個包含了接收者的函數。
對于結構體方法,接收者可以是結構體類型的值或是指針。
9.5.1 指針類型接收者當接收者類型為指針時,可以通過該方法改變該接收者的成員變量值,即使你使用了非指針類型實例調用該函數,也可以改變實例對應的成員變量值。
在以下示例中,我們為User結構體創建了ChangeName方法,在該方法內部將接收者的Name值修改為Tom,接收者的類型為指針類型:
[ 動手寫9.5.1 ]
package main
import "fmt"
type User struct {Name string
Email string
}
func (u *User) ChangeName() {// 指針類型接收者
u.Name = "Tom"
}
func main() {u := &User{"Peter", "[email protected]"} // 創建指針類型結構體實例
fmt.Println("Name: ", u.Name, " Email: ", u.Email)
u.ChangeName()
fmt.Println("Name: ", u.Name, " Email: ", u.Email)
}
運行結果
只要結構體方法的接收者為指針類型,即使實例不是指針類型,修改也能生效:
[ 動手寫 9.5.2 ]
package main
import "fmt"
type User struct {Name string
Email string
}
func (u *User) ChangeName() {// 指針類型接收者
u.Name = "Tom"
}
func main() {u := User{"Peter", "[email protected]"} // 創建非指針類型結構體實例
fmt.Println("Name: ", u.Name, " Email: ", u.Email)
u.ChangeName()
fmt.Println("Name: ", u.Name, " Email: ", u.Email)
}
運行結果
當接收者不是一個指針時,該方法操作對應接收者值的副本,否則即使你使用了指針調用函數,也無法改變成員變量值。
[ 動手寫 9.5.3]
package main
import "fmt"
type User struct {Name string
Email string
}
func (u User) ChangeName() {// 值類型接收者
u.Name = "Tom"
}
func main() {u := &User{"Peter", "[email protected]"} //創建指針類型結構體實例
fmt.Println("Name: ", u.Name, " Email: ", u.Email)
u.ChangeName()
fmt.Println("Name: ", u.Name, " Email: ", u.Email)
}
運行結果
如果方法需要修改接收者,接收者必須是指針類型。一般約定的接收者命名是類型的一個或兩個字母的縮寫(如u或者us之于User)。
你是否還在尋找穩定的海外服務器提供商?創新互聯www.cdcxhl.cn海外機房具備T級流量清洗系統配攻擊溯源,準確流量調度確保服務器高可用性,企業級服務器適合批量采購,新人活動首月15元起,快前往官網查看詳情吧
分享文章:非零基礎自學Golang第9章結構體9.5結構體方法-創新互聯
本文來源:http://m.2m8n56k.cn/article6/ceddog.html
成都網站建設公司_創新互聯,為您提供網站營銷、移動網站建設、全網營銷推廣、網站設計公司、品牌網站建設、自適應網站
聲明:本網站發布的內容(圖片、視頻和文字)以用戶投稿、用戶轉載內容為主,如果涉及侵權請盡快告知,我們將會在第一時間刪除。文章觀點不代表本網站立場,如需處理請聯系客服。電話:028-86922220;郵箱:[email protected]。內容未經允許不得轉載,或轉載時需注明來源: 創新互聯