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();
}