Go語言中,一個方法就是一個包含了接收者的函數(shù)。
對于結(jié)構(gòu)體方法,接收者可以是結(jié)構(gòu)體類型的值或是指針。
9.5.1 指針類型接收者當(dāng)接收者類型為指針時,可以通過該方法改變該接收者的成員變量值,即使你使用了非指針類型實例調(diào)用該函數(shù),也可以改變實例對應(yīng)的成員變量值。
在以下示例中,我們?yōu)閁ser結(jié)構(gòu)體創(chuàng)建了ChangeName方法,在該方法內(nèi)部將接收者的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", "go@go.com"} // 創(chuàng)建指針類型結(jié)構(gòu)體實例
fmt.Println("Name: ", u.Name, " Email: ", u.Email)
u.ChangeName()
fmt.Println("Name: ", u.Name, " Email: ", u.Email)
}
運(yùn)行結(jié)果
只要結(jié)構(gòu)體方法的接收者為指針類型,即使實例不是指針類型,修改也能生效:
[ 動手寫 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", "go@go.com"} // 創(chuàng)建非指針類型結(jié)構(gòu)體實例
fmt.Println("Name: ", u.Name, " Email: ", u.Email)
u.ChangeName()
fmt.Println("Name: ", u.Name, " Email: ", u.Email)
}
運(yùn)行結(jié)果
9.5.2 值類型接收者當(dāng)接收者不是一個指針時,該方法操作對應(yīng)接收者值的副本,否則即使你使用了指針調(diào)用函數(shù),也無法改變成員變量值。
[ 動手寫 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", "go@go.com"} //創(chuàng)建指針類型結(jié)構(gòu)體實例
fmt.Println("Name: ", u.Name, " Email: ", u.Email)
u.ChangeName()
fmt.Println("Name: ", u.Name, " Email: ", u.Email)
}
運(yùn)行結(jié)果
如果方法需要修改接收者,接收者必須是指針類型。一般約定的接收者命名是類型的一個或兩個字母的縮寫(如u或者us之于User)。
你是否還在尋找穩(wěn)定的海外服務(wù)器提供商?創(chuàng)新互聯(lián)www.cdcxhl.cn海外機(jī)房具備T級流量清洗系統(tǒng)配攻擊溯源,準(zhǔn)確流量調(diào)度確保服務(wù)器高可用性,企業(yè)級服務(wù)器適合批量采購,新人活動首月15元起,快前往官網(wǎng)查看詳情吧
分享文章:非零基礎(chǔ)自學(xué)Golang第9章結(jié)構(gòu)體9.5結(jié)構(gòu)體方法-創(chuàng)新互聯(lián)
本文來源:http://bm7419.com/article6/ceddog.html
成都網(wǎng)站建設(shè)公司_創(chuàng)新互聯(lián),為您提供網(wǎng)站營銷、移動網(wǎng)站建設(shè)、全網(wǎng)營銷推廣、網(wǎng)站設(shè)計公司、品牌網(wǎng)站建設(shè)、自適應(yīng)網(wǎng)站
聲明:本網(wǎng)站發(fā)布的內(nèi)容(圖片、視頻和文字)以用戶投稿、用戶轉(zhuǎn)載內(nèi)容為主,如果涉及侵權(quán)請盡快告知,我們將會在第一時間刪除。文章觀點不代表本網(wǎng)站立場,如需處理請聯(lián)系客服。電話:028-86922220;郵箱:631063699@qq.com。內(nèi)容未經(jīng)允許不得轉(zhuǎn)載,或轉(zhuǎn)載時需注明來源: 創(chuàng)新互聯(lián)
猜你還喜歡下面的內(nèi)容