非零基础自学Golang第9章结构体9.5结构体方法-创新互联
非零基础自学Golang成都创新互联长期为上1000家客户提供的网站建设服务,团队从业经验10年,关注不同地域、不同群体,并针对不同对象提供差异化的产品和服务;打造开放共赢平台,与合作伙伴共同营造健康的互联网生态环境。为济水街道企业提供专业的成都做网站、成都网站建设,济水街道网站改版等技术服务。拥有10余年丰富建站经验和众多成功案例,为您定制开发。文章目录
本文名称:非零基础自学Golang第9章结构体9.5结构体方法-创新互联
文章转载:http://hbruida.cn/article/ceddog.html
- 非零基础自学Golang
- 第9章 结构体
- 9.5 结构体方法
- 9.5.1 指针类型接收者
- 9.5.2 值类型接收者
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", "go@go.com"} // 创建指针类型结构体实例
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", "go@go.com"} // 创建非指针类型结构体实例
fmt.Println("Name: ", u.Name, " Email: ", u.Email)
u.ChangeName()
fmt.Println("Name: ", u.Name, " Email: ", u.Email)
}
运行结果
9.5.2 值类型接收者当接收者不是一个指针时,该方法操作对应接收者值的副本,否则即使你使用了指针调用函数,也无法改变成员变量值。
[ 动手写 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"} //创建指针类型结构体实例
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://hbruida.cn/article/ceddog.html