为了账号安全,请及时绑定邮箱和手机立即绑定

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

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

Go
哈士奇WWW 2021-09-10 09:50:36
使用struct一个应该打印出结构元素的函数,我编写了这个简单的程序:package mainimport "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"}它工作得很好。但它们基本上是定义同一实体的不同句法方式。这就是为什么我不明白错误的来源。
查看完整描述

2 回答

?
眼眸繁星

TA贡献1873条经验 获得超9个赞

错误在这一行


    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

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



查看完整回答
反对 回复 2021-09-10
?
江户川乱折腾

TA贡献1851条经验 获得超5个赞

第四种方式:


var s *Salutation = &(Salutation{});


我总是通过引用传递结构,而不是值。并且始终按值传递原语。


您的方法重写为接收器方法:


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();

}


查看完整回答
反对 回复 2021-09-10
  • 2 回答
  • 0 关注
  • 153 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信