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"}
なく動作します。しかし、基本的には同じエンティティを定義するための異なる構文方法です。そのため、エラーの原因がわかりません。
ベストアンサー1
エラーはこの行にあります
var s = Salutation
= の右側にあるものは値に評価される必要があります。Salutation
は値ではなく型です。 を宣言する方法は 3 つあります。
var s Salutation // variable declaration using a type
var s = Salutation{} // variable declaration using a value
s := Salutation{} // short variable declaration
3 つの宣言の結果はすべて同じです。通常、3 番目のバリエーションは 2 番目のバリエーションよりも優先されますが、パッケージ レベルの変数を宣言するためには使用できません。
言語仕様を参照変数宣言の詳細については。
変数の宣言とフィールドの初期化は、1 つのステートメントに組み合わせることができます。
var s = Salutation{name: "Alex", greeting: "Hello"} // variable declaration
s := Salutation{name: "Alex", greeting: "Hello"} // short variable declaration