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中,我只有几个文件,其中一个文件只是一个结构。为什么第一个示例不起作用,而第二个却起作用?