亚洲在线久爱草,狠狠天天香蕉网,天天搞日日干久草,伊人亚洲日本欧美

為了賬號安全,請及時綁定郵箱和手機立即綁定
已解決430363個問題,去搜搜看,總會有你想問的

錯誤:結構類型不是表達式

錯誤:結構類型不是表達式

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 關注
  • 202 瀏覽
慕課專欄
更多

添加回答

舉報

0/150
提交
取消
微信客服

購課補貼
聯系客服咨詢優惠詳情

幫助反饋 APP下載

慕課網APP
您的移動學習伙伴

公眾號

掃描二維碼
關注慕課網微信公眾號