我具有以下功能:func (c *Class)A()[4]bytefunc B(x []byte)我想打电话B(c.A()[:])但是我得到这个错误:cannot take the address of c.(*Class).A()如何正确获取Go中函数返回的数组切片?
2 回答
狐的传说
TA贡献1804条经验 获得超3个赞
的价值c.A(),从方法的返回值,不能寻址。
地址运算符
对于类型T的操作数x,地址操作&x生成指向*的* T类型的指针。操作数必须是可寻址的,即变量,指针间接寻址或切片索引操作;或可寻址结构操作数的字段选择器;或可寻址数组的数组索引操作。除可寻址性要求外,x还可为复合文字。
切片
如果切片的操作数是字符串或切片,则切片操作的结果是相同类型的字符串或切片。如果切片的操作数是数组,则它必须是可寻址的,并且切片操作的结果是与数组具有相同元素类型的切片。
使的值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]
- 2 回答
- 0 关注
- 231 浏览
添加回答
举报
0/150
提交
取消