Ошибка: 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

Результат всех трех объявлений идентичен. Третья вариация обычно предпочтительнее второй, но не может использоваться для объявления переменной уровня пакета.

Подробную информацию о объявлениях переменных см. в спецификации языка .