该程序无法编译。它显示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
}
答案 0 :(得分:0)
函数类型由关键字func
定义,后跟一个可选的接收器,然后是函数名,括号之间的参数列表(可能为空)和结果列表(可能为空) ,然后是函数主体。
结果列表(零个或多个类型)是函数将返回的内容的协定。它可以是类型列表,也可以是命名参数列表,包括它们的类型。
在call()
的函数定义中:
func (p *Sample) call() *Sample.Env {
您的结果列表不符合此期望。 *Sample.Env
指向类型为Env
的{{1}}属性的指针,而不是类型本身的指针。
您的函数返回值Sample
。如果您修改函数签名以使结果列表只是&p.Env
的类型,则程序将运行。 &p.Env
是字符串,因此p.Env
是指向字符串的指针。 &p.Env
是“指向字符串的指针”的类型。因此,如果将函数签名更改为此,则代码将起作用:
*string
请参阅:
func (p *Sample) call() *string {
的返回类型为call()
,即指向字符串的指针。因此,要打印它,您只需将其取消引用到带有星号的字符串即可:
*string