使用 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/