返回指针的Golang函数

42fyovps  于 2023-06-19  发布在  Go
关注(0)|答案(1)|浏览(120)

我刚开始使用Go语言。我发现了Go语言中指针的一些奇怪之处。这里有一个让我困惑的例子。假设我有一个包含Golang简单模块,如下所示

我的模块是Person模块。Person模块位于person/person.go目录中,代码如下

然后另一个初始化person模块的文件位于person/package.go目录中,代码如下所示

然后我在main中运行。像下面这样运行

问题

当我改变人/包.返回一个指针,如下所示

那么main. go就变成了一个错误,看起来好像没有找到我在Person中实现的函数

帮帮忙,有什么不对吗?感谢您的评分
示例代码在下面的链接中
https://codesandbox.io/p/sandbox/heuristic-proskuriakova-hqmxv9?file=%2Fmain.go%3A7%2C1-8%2C14

hpcdzsge

hpcdzsge1#

在GO中使用指针时,您需要记住三个方面,即:

  • 要获取变量x的地址,我们在变量前面加上一个&符号x:=&y
  • 要读取指针的内容(不是地址),我们在指针变量前面加上星号a:=*b
  • 若要创建作为指针的参数或返回值,还需要在变量类型前面加上星号

查看代码后,以下是您遇到问题的原因。
1.如果你想让你的Gen方法返回一个指向接口的指针,那么你应该使用&操作符来获取地址。

func Gen() *Person {
    man := NewPerson()
    return &man
}

1.因为你要返回一个地址到一个接口,那么在你的main函数中你必须解引用指针来使用它,如下所示,记住你要从方法中返回两个值,所以你需要将返回值赋给两个变量。在这种情况下,因为我知道我们不会收到错误,所以我使用discard来忽略第二个变量:

func main() {
    man := person.Gen()
    msg, _ := (*man).Greating("Kaido")
    fmt.Println(*msg)
}

相关问题