質問: go言語で構造体を宣言するときに ``` type Vserver struct { Name string Services map[ServiceKey]*Service } type Service struct { ServiceKey hoge string } type ServiceKey struct { fuga string } ``` 上記コードの中の下記2点についてわからず困っております。 どういうことなのかご教授頂けましたら幸いです。 --- 1 構造体 Service の中で 他の構造体(ServiceKey)を宣言している場合、どういうことになるのか? (ServiceKeyの中で宣言している fuga string を Service構造体の中で宣言していることと全く同じことなのでしょうか?) 2 構造体 Vserver の中で Services map[ServiceKey]*Service これは何を宣言しているのか? (mapだから、連想配列的なものを作っているのでしょうか?) go言語に詳しいかたいらっしゃいましたら教えて頂けませんでしょうか?
回答: fmt.Printf()の第一引数に`%#v`と書くと、詳細に見ることができます。 1 構造体の中に変数名を書かずに構造体を入れると、 入れた構造体のメンバが展開されるようなイメージです。 ``` type Service struct { fuga string //ServiceKeyから hoge string } ``` このようなアクセスが出来ます。 上のリンクのmain関数の三行目で実際にServiceのfugaにアクセスしています。 2 Services map[ServiceKey]*Service これはmapです。おっしゃる通り連想配列です。 *はポインタ変数を宣言するときに用いられますが、構造体のメンバへのアクセスはポインタ変数でも直接出来できるのであまり意識しないでも大丈夫です。 mapについてご存じないということはa tour of goはまだ手を付けていないか途中ですか? A Tour of Go A Tour of Go > Maps 一通りやってみることをおすすめします。