我有以下功能:
func (c *Class)A()[4]byte
func B(x []byte)
我想打电话
B(c.A()[:])
但是我收到了这个错误:
cannot take the address of c.(*Class).A()
如何正确获取Go中函数返回的数组?
答案 0 :(得分:9)
c.A()
的值,即方法的返回值,不可寻址。
对于类型为T的操作数x,地址操作& x生成a 类型* T到x的指针。操作数必须是可寻址的,即 变量,指针间接或切片索引操作; 或可寻址结构操作数的字段选择器;或数组 可寻址数组的索引操作。作为例外 可寻址性要求,x也可以是复合文字。
如果切片操作数是字符串或切片,则切片的结果 operation是相同类型的字符串或切片。如果切片的操作数 是一个数组,它必须是可寻址的和切片的结果 operation是一个与数组具有相同元素类型的切片。
为切片操作c.A()
设置一个数组[:]
的值。例如,将值赋给变量;变量是可寻址的。
例如,
package main
import "fmt"
type Class struct{}
func (c *Class) A() [4]byte { return [4]byte{0, 1, 2, 3} }
func B(x []byte) { fmt.Println("x", x) }
func main() {
var c Class
// B(c.A()[:]) // cannot take the address of c.A()
xa := c.A()
B(xa[:])
}
输出:
x [0 1 2 3]
答案 1 :(得分:2)
您是否尝试先将数组放在局部变量中?
ary := c.A()
B(ary[:])