如何在方法中返回结构变量

时间:2018-06-24 23:30:14

标签: go struct

该程序无法编译。它显示Env方法在方法sample的结构call上不可用。我可以直接在主程序中访问Env变量,但是我很好奇为什么不编译。

package main

//Sample is a struct
type Sample struct {
    Env string
}

func main() {
    pa := &Sample{Env: "acd"}
    pa.call()
}

func (p *Sample) call() *Sample.Env {
    return &p.Env
}

1 个答案:

答案 0 :(得分:0)

函数类型由关键字func定义,后跟一个可选的接收器,然后是函数名,括号之间的参数列表(可能为空)和结果列表(可能为空) ,然后是函数主体。

结果列表(零个或多个类型)是函数将返回的内容的协定。它可以是类型列表,也可以是命名参数列表,包括它们的类型。

call()的函数定义中:

func (p *Sample) call() *Sample.Env {

您的结果列表不符合此期望。 *Sample.Env指向类型为Env的{​​{1}}属性的指针,而不是类型本身的指针。

您的函数返回值Sample。如果您修改函数签名以使结果列表只是&p.Env的类型,则程序将运行。 &p.Env是字符串,因此p.Env是指向字符串的指针。 &p.Env是“指向字符串的指针”的类型。因此,如果将函数签名更改为此,则代码将起作用:

*string

请参阅:

  1. Function Types
  2. Types

发布脚本

func (p *Sample) call() *string { 的返回类型为call(),即指向字符串的指针。因此,要打印它,您只需将其取消引用到带有星号的字符串即可:

*string