Ошибка: struct Тип не является выражением
Используя struct
и функцию, которая должна печатать элементы структуры, я написал эту простую программу:
package main
import "fmt"
type Salutation struct {
name string
greeting string
}
func Greet(salutation Salutation) {
fmt.Println(salutation.name)
fmt.Println(salutation.greeting)
}
func main() {
var s = Salutation
s.name = "Alex"
s.greeting = "Hi"
Greet(s)
}
При запуске я получаю сообщение об ошибке go:16: type Salutation is not an expression
. Что здесь не так?
Интересно, что когда я изменяю определение s
на var s = Salutation {"Alex", "Hi"}
, он работает отлично. Но они в основном разные синтаксические способы определения одного и того же объекта. Вот почему я не понимаю источник ошибки.
Ответы
Ответ 1
Ошибка в этой строке
var s = Salutation
Вещь справа от = должна оцениваться до значения. Salutation
- это тип, а не значение. Вот три способа объявления s:
var s Salutation // variable declaration using a type
var s = Salutation{} // variable declaration using a value
s := Salutation{} // short variable declaration
Результат всех трех объявлений идентичен. Третья вариация обычно предпочтительнее второй, но не может использоваться для объявления переменной уровня пакета.
Подробную информацию о объявлениях переменных см. в спецификации языка .