Golang初学者问题:结构体、方法与指针的使用
Golang初学者问题:结构体、方法与指针的使用 我正在学习一门Udemy课程,对指针有一个疑问,但老师没有讨论到。
我理解指针、内存地址及其内容。我知道,如果你想就地修改结构体(在此例中),而不是修改副本,可能会需要使用指针。
参考以下代码…
type person struct {
first string
last string
}
func (p *person) changeMeMethod() {
(*p).first = "Jo"
}
func changeMeFunc(p *person) {
(*p).first = "Flem"
}
func main() {
p := person{
first: "Mac",
last: "Kam",
}
fmt.Println(p)
p.changeMeMethod()
fmt.Println(p)
changeMeFunc(&p)
fmt.Println(p)
}
changeMeMethod 中的接收器使用指针有什么实际原因吗?因为该方法已经附加到结构体上,所以不会复制值。
我这样想对吗?
更多关于Golang初学者问题:结构体、方法与指针的使用的实战教程也可以访问 https://www.itying.com/category-94-b0.html
2 回复
在Go语言中,我们不会为接收器使用像this或self这样的特殊名称,而是像为任何参数选择名称一样来选择接收器名称。
使用指针作为接收器可以避免复制值,这在需要更新接收器变量或避免复制值时使用,我们通过指针使用变量的地址。
否则:
type person struct {
first string
last string
}
func (p person) changeMeMethod() {
p.first = "Jo"
}
func changeMeFunc(p person) {
p.first = "Flem"
}
func main() {
p := person{
first: "Mac",
last: "Kam",
}
fmt.Println(p)
p.changeMeMethod()
fmt.Println(p)
changeMeFunc(p)
fmt.Println(p)
}
// 输出:
// {Mac Kam}
// {Mac Kam}
// {Mac Kam}
https://play.golang.org/p/2Pdlv2IOxZD
使用指针
type person struct {
first string
last string
}
func (p *person) changeMeMethod() {
p.first = "Jo"
}
func changeMeFunc(p *person) {
p.first = "Flem"
}
func main() {
p := person{
first: "Mac",
last: "Kam",
}
fmt.Println(p)
p.changeMeMethod()
fmt.Println(p)
changeMeFunc(&p)
fmt.Println(p)
}
// 输出:
// {Mac Kam}
// {Jo Kam}
// {Flem Kam}
更多关于Golang初学者问题:结构体、方法与指针的使用的实战系列教程也可以访问 https://www.itying.com/category-94-b0.html


