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

我具有以下功能:


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

func B(x []byte)

我想打电话


B(c.A()[:])

但是我得到这个错误:


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

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


LEATH
浏览 232回答 2
2回答

狐的传说

的价值c.A(),从方法的返回值,不能寻址。地址运算符对于类型T的操作数x,地址操作&x生成指向*的* T类型的指针。操作数必须是可寻址的,即变量,指针间接寻址或切片索引操作;或可寻址结构操作数的字段选择器;或可寻址数组的数组索引操作。除可寻址性要求外,x还可为复合文字。切片如果切片的操作数是字符串或切片,则切片操作的结果是相同类型的字符串或切片。如果切片的操作数是数组,则它必须是可寻址的,并且切片操作的结果是与数组具有相同元素类型的切片。使的值c.A()成为数组,可用于切片操作[:]。例如,将值分配给变量;变量是可寻址的。例如,package mainimport "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]

智慧大石

您是否尝试过将数组首先粘贴到局部变量中?ary := c.A()B(ary[:])
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

Go