2014-12-13 70 views
18

使用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"}時,它工作得很好。但是它們在定義相同實體方面基本上是不同的語法。這就是爲什麼我不明白錯誤的根源。

回答

31

的錯誤是在這條線

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

+0

'type salution struct {}'是否可以記錄'struct''fmt.Println(salution,「struct typee」)'@Cerise Limon – muthukumar 2018-01-23 13:11:17

相關問題