Error: struct Type is not an expression
Solution 1:
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.
Solution 2:
4th way:
var s *Salutation = &( Salutation{} );
I always pass structs by reference, not value. And always pass primitives by value.
Your method re-written as a reciever method:
func (s *Salutation) Greet()() {
fmt.Println(s.name)
fmt.Println(s.greeting)
}
Full Example:
package main
import "fmt"
func NewSalutation()(*Salutation){
return &( Salutation{} );
}
type Salutation struct {
name string
greeting string
}
func (s *Salutation) Greet()() {
fmt.Println(s.name)
fmt.Println(s.greeting)
}
func main() {
var s *Salutation; //:<--Null
s = NewSalutation() //:<--Points To Instance
s.name = "Alex"
s.greeting = "Hi"
s.Greet();
}