猿问

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

使用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"}它工作得很好。但它们基本上是定义同一实体的不同句法方式。这就是为什么我不明白错误的来源。


哈士奇WWW
浏览 154回答 2
2回答

眼眸繁星

错误在这一行    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所有三个声明的结果是相同的。第三种变体通常优于第二种,但不能用于声明包级变量。

江户川乱折腾

第四种方式:var s *Salutation = &(Salutation{});我总是通过引用传递结构,而不是值。并且始终按值传递原语。您的方法重写为接收器方法:func (s *Salutation) Greet()() {&nbsp; &nbsp; fmt.Println(s.name)&nbsp; &nbsp; fmt.Println(s.greeting)}完整示例:package mainimport "fmt"func NewSalutation()(*Salutation){&nbsp; &nbsp; return &( Salutation{} );}type Salutation struct {&nbsp; &nbsp; name&nbsp; &nbsp; &nbsp;string&nbsp; &nbsp; greeting string}func (s *Salutation) Greet()() {&nbsp; &nbsp; fmt.Println(s.name)&nbsp; &nbsp; fmt.Println(s.greeting)}func main() {&nbsp; &nbsp; var s *Salutation;&nbsp; &nbsp;//:<--Null&nbsp; &nbsp; s = NewSalutation()&nbsp; //:<--Points To Instance&nbsp; &nbsp; s.name&nbsp; &nbsp; &nbsp;= "Alex"&nbsp; &nbsp; s.greeting = "Hi"&nbsp; &nbsp; s.Greet();}
随时随地看视频慕课网APP

相关分类

Go
我要回答