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) {
fmt.Println(salutation.name)
fmt.Println(salutation.greeting)
}
func main() {
var s = Salutation
s.name = "Alex"
s.greeting = "Hi"
Greet(s)
}
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
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: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.