我有以下功能:
func (c *Class)A()[4]byte
func B(x []byte)
Run Code Online (Sandbox Code Playgroud)
我想打电话
B(c.A()[:])
Run Code Online (Sandbox Code Playgroud)
但我得到这个错误:
cannot take the address of c.(*Class).A()
Run Code Online (Sandbox Code Playgroud)
如何正确获取Go中函数返回的数组?
的价值c.A(),从方法的返回值,不能寻址.
对于类型为T的操作数x,地址操作&x生成类型为*T到x的指针.操作数必须是可寻址的,即,变量,指针间接或切片索引操作; 或可寻址结构操作数的字段选择器; 或者可寻址数组的数组索引操作.作为可寻址性要求的例外,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[:])
}
Run Code Online (Sandbox Code Playgroud)
输出:
x [0 1 2 3]
Run Code Online (Sandbox Code Playgroud)