从函数返回语句转到数组切片

时间:2011-11-29 22:26:49

标签: return go slice

我有以下功能:

func (c *Class)A()[4]byte
func B(x []byte)

我想打电话

B(c.A()[:])

但是我收到了这个错误:

cannot take the address of c.(*Class).A()

如何正确获取Go中函数返回的数组?

2 个答案:

答案 0 :(得分:9)

c.A()的值,即方法的返回值,不可寻址。

  

Address operators

     

对于类型为T的操作数x,地址操作& x生成a   类型* T到x的指针。操作数必须是可寻址的,即   变量,指针间接或切片索引操作;   或可寻址结构操作数的字段选择器;或数组   可寻址数组的索引操作。作为例外   可寻址性要求,x也可以是复合文字。

     

Slices

     

如果切片操作数是字符串或切片,则切片的结果   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[:])