为什么我不能将地址运算符(&)直接应用于函数返回值

时间:2017-04-07 15:35:54

标签: function pointers go

我不明白为什么下面的代码片段没有编译。编译器声明:

cannot take the address of getAString()

代码:

func getAStringPointer() *string {
    return &getAString()
}

func getAString() string {
    return ""
}

但是,将函数的结果存储在auxliary变量中并返回编译器行为正常的变量的地址。

func getAStringPointer() *string {
    var aString = getAString()
    return &aString
}

func getAString() string {
    return ""
}

1 个答案:

答案 0 :(得分:2)

您无法将&应用于此类值(除非它是复合文字)。来自规范:

  

对于类型为T的操作数x,地址操作& x生成a   类型* T到x的指针。操作数必须是可寻址的,即   变量,指针间接或切片索引操作;   或可寻址结构操作数的字段选择器;或数组   可寻址数组的索引操作。作为例外   可寻址性要求,x也可以是(可能括在括号中)   复合文字。如果x的评估会导致运行时   恐慌,然后对& x的评价也是如此。