登录
首页 >  Golang >  Go问答

带指针返回的 Golang 函数

来源:stackoverflow

时间:2024-04-23 20:09:34 487浏览 收藏

在Golang实战开发的过程中,我们经常会遇到一些这样那样的问题,然后要卡好半天,等问题解决了才发现原来一些细节知识点还是没有掌握好。今天golang学习网就整理分享《带指针返回的 Golang 函数》,聊聊,希望可以帮助到正在努力赚钱的你。

问题内容

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

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

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

然后我在 main.go 中运行如下

问题

当我更改 person/package.go 以返回如下所示的指针时

然后main.go就报错了,好像没有找到我在Person中实现的函数

请帮忙看看有什么问题吗?谢谢..

示例代码在下面的链接中

https://codesandbox.io/p/sandbox/heuristic-proskuriakova-hqmxv9?file=%2Fmain.go%3A7%2C1-8%2C14


正确答案


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

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

查看您的代码后,以下是您遇到问题的原因。

  1. 如果您希望 gen 方法返回指向接口的指针,那么您应该使用 & 运算符来获取地址。
func gen() *person {
    man := newperson()
    return &man
}
  1. 由于您要向接口返回地址,因此在主函数中您必须取消引用指针才能使用它,如下所示,并记住您正在从方法返回两个值,因此需要将返回值分配给两个变量。在这种情况下,因为我知道我们不会收到错误,所以我使用丢弃来忽略第二个变量:
func main() {
    man := person.Gen()
    msg, _ := (*man).Greating("Kaido")
    fmt.Println(*msg)
}

理论要掌握,实操不能落!以上关于《带指针返回的 Golang 函数》的详细介绍,大家都掌握了吧!如果想要继续提升自己的能力,那么就来关注golang学习网公众号吧!

声明:本文转载于:stackoverflow 如有侵犯,请联系study_golang@163.com删除
相关阅读
更多>
最新阅读
更多>
课程推荐
更多>