Go – Error: struct Type is not an expression


Using struct and a function that is supposed to print out the struct's elements, I have written this simple program:

package main

import "fmt"

type Salutation struct {
    name     string
    greeting string

func Greet(salutation Salutation) {

func main() {
    var s = Salutation
    s.name = "Alex"
    s.greeting = "Hi"

When I run it I get the error go:16: type Salutation is not an expression. What goes wrong here?

Interestingly enough, when I change the definition of s to var s = Salutation {"Alex", "Hi"} it works just fine. But they are basically different syntactic ways to define the same entity. That's why I don't understand the source of the error.

Best Solution

The error is on this line

    var s = Salutation

The thing to the right of the = must evaluate to a value. Salutation is a type, not value. Here are three ways to declare s:

 var s Salutation      // variable declaration using a type 

 var s = Salutation{}  // variable declaration using a value

 s := Salutation{}     // short variable declaration

The result of all three declarations is identical. The third variation is usually preferred to the second, but cannot be used to declare a package-level variable.

See the language specification for all of the details on variable declarations.

Related Question