struct - 错误 : struct Type is not an expression

标签 struct go

使用 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 Salutation is not an expression。这里出了什么问题?

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

最佳答案

错误就在这一行

    var s = Salutation

= 右边的东西必须评估为一个值。 Salutation 是一种类型,而不是值。以下是声明s的三种方式:

 var s Salutation      // variable declaration using a type 

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

 s := Salutation{}     // short variable declaration

所有三个声明的结果是相同的。第三种变体通常优于第二种,但不能用于声明包级变量。

参见语言规范 for all of the details on variable declarations .

变量声明和字段初始化可以组合成一条语句:

 var s = Salutation{name: "Alex", greeting: "Hello"} // variable declaration

 s := Salutation{name: "Alex", greeting: "Hello"}    // short variable declaration

关于struct - 错误 : struct Type is not an expression,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27455170/

相关文章:

c++ - 共享内存中的 vector 结构

go - 在不丢失接收器类型信息的情况下调用嵌入式结构接口(interface)方法

go - 在不同类型的结构之间复制公共(public)字段

C、gets() 可能很危险。文件中的数据不会出现

c - 我想在结构中添加一些值

c++ - static_cast 和 reinterpret_cast 有什么区别?

compilation - Go: "all.bash"编译测试失败 "permission denied"

c++ - 如何将结构定义为结构的成员?

testing - 只在测试文件中引用的go测试代码会被编译成二进制文件吗?

找不到未编码的 XML 节点