エラー: 構造体型は式ではありません 質問する

エラー: 構造体型は式ではありません 質問する

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

おすすめ記事