您好,匿名用户

关于go语言的方法和指针类型方法区别.

0 投票
package main

import "fmt"

type Person struct {
    Name string
    Age  int
}

func (p Person) a1() string {
    return fmt.Sprintf("%v (%v years)", p.Name, p.Age)
}

func (p *Person) a2() string {
    return fmt.Sprintf("%v (%v years)", p.Name, p.Age)
}

func main() {
    a := Person{"Arthur Dent", 42}
    z := &Person{"Zaphod Beeblebrox", 9001}
    fmt.Println(a.a1(), z.a2())
}

想请教一下,p Person 是把方法放到值类型上,而p Person是放到指针上(不知道有没错,在自学中),那么那么为啥要分p Person,p Person,统一放p Person不行吗?或者什么应用场景下用p *Person,什么场景下用p Person### 题目描述

题目来源及自己的思路

相关代码

// 请把代码文本粘贴到下方(请勿用图片代替代码)

你期待的结果是什么?实际看到的错误信息又是什么?

用户头像 提问 5月23日 @ Jax 中士 (1,314 威望)
分享到:

1个回答

0 投票
 
最佳答案

当你需要修改 p 的时候要调用 func (p *Person) a2() string 指针类型的函数
如果你调用 func (p Person) a2() string 这样的方法是修改不成功的,因为调用时使用的是 p 的一个 copy

package main

import "fmt"

type Person struct {
    Name string
    Age  int
}

func (p Person) show() {
    fmt.Printf("%v (%v years)", p.Name, p.Age)
}

func (p Person) modify1() string {
    p.Age = 38
}

func (p *Person) modify2() string {
    p.Age = 38
}

func main() {
    a := Person{"Arthur Dent", 42}
    a.show()
    a.modify1()
    a.show()
    a.modify2()
    a.show()
}
用户头像 回复 5月23日 @ Shen 中士 (1,403 威望)
选中 5月12日 @Jax
提一个问题:

相关问题

0 投票
1 回复 60 阅读
用户头像 提问 5月29日 @ Trundle 中士 (1,407 威望)
0 投票
1 回复 12 阅读
0 投票
1 回复 175 阅读
用户头像 提问 2017年 3月21日 @ Zyra 中士 (1,304 威望)
0 投票
1 回复 48 阅读
用户头像 提问 2014年 11月26日 @ 坑爹 上士 (1,753 威望)

欢迎来到随意问技术百科, 这是一个面向专业开发者的IT问答网站,提供途径助开发者查找IT技术方案,解决程序bug和网站运维难题等。
温馨提示:本网站禁止用户发布与IT技术无关的、粗浅的、毫无意义的或者违法国家法规的等不合理内容,谢谢支持。

IT技术交流群 - 随意问
欢迎访问随意问技术百科,为了给您提供更好的服务,请及时反馈您的意见。
...