Значение c.A()
, возвращаемое из метода, не адресуется.
Операторы адреса
Для операнда x типаT, адресная операция & 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[:])
}
Вывод:
x [0 1 2 3]