Struct 错误:结构类型不是表达式

Struct 错误:结构类型不是表达式,struct,go,Struct,Go,使用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

使用
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称呼不是一个表达式
。这里出了什么问题


非常有趣的是,当我将
s
的定义更改为
var s=saltation{“Alex”,“Hi”}
时,它工作得很好。但它们基本上是定义同一实体的不同语法方式。这就是为什么我不明白错误的来源

错误在这一行

    var s = Salutation
=右边的对象必须计算为一个值<代码>称呼是一种类型,而不是值。以下是三种声明s的方法:

 var s Salutation      // variable declaration using a type 

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

 s := Salutation{}     // short variable declaration
所有三个声明的结果都是相同的。第三个变量通常优先于第二个变量,但不能用于声明包级别变量

请参阅语言规范。

第四种方式:

var s*称呼=&(称呼{})

我总是通过引用而不是值传递结构。 并始终按值传递基本体

您的方法重新编写为Receiver方法:

func (s *Salutation) Greet()() {
    fmt.Println(s.name)
    fmt.Println(s.greeting)
}
完整示例:

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();
}
主程序包
输入“fmt”
func NewSalutation()(*称呼){
返回和(称呼{});
}
类型称呼结构{
名称字符串
问候语串
}
func(s*称呼)Greet()(){
fmt.Println(s.name)
fmt.Println(s.问候语)
}
func main(){

var s*saltation;/:
键入saltion struct{}
是否可以记录
struct
fmt.Println(saltion,“struct type”)
@Cerise LimonI导入了一个名为“settings”的包。在settings中,我只有几个文件,其中一个文件只是一个结构。为什么第一个示例不起作用,而第二个却起作用?