"невозможно назначить" при назначении элементу структуры - PullRequest
0 голосов
/ 17 октября 2019

Следующая программа не может быть скомпилирована с ошибкой «невозможно присвоить f1 (). ID».

package main

type Employee struct {                                                                                                                                                                         
    ID        int 
    Name      string
}

func main() {
    f1().ID = 11     // causes "cannot assign to f1().ID" error
    f2().ID = 22
}

func f1() Employee {
    return Employee{1, "Dilbert 1"}
}

func f2() *Employee {
    return &Employee{2, "Dilbert 2"}
}

Поскольку функция f1 () возвращает переменную Employee, почему присвоение ее члену не разрешено? То же самое произведение Возвращаемое значение f1 () присваивается переменной, а ее член присваивается значение следующим образом:

v := f1()
v.ID = 10   // This works

1 Ответ

0 голосов
/ 17 октября 2019

Возвращаемые значения функции не адресуемы:

https://golang.org/ref/spec#Assignments

Каждый левый операнд должен быть адресуемым, выражением индекса карты или (только для = назначений)пустой идентификатор. Операнды могут быть заключены в скобки.

Следующее работает, поскольку возвращаемое значение функции теперь присваивается переменной v, а v адресуется.

v := f1()
v.ID = 10 
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...