質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.46%
Go

Go(golang)は、Googleで開発されたオープンソースのプログラミング言語です。

Q&A

1回答

789閲覧

Goの構造体を初期化したい

退会済みユーザー

退会済みユーザー

総合スコア0

Go

Go(golang)は、Googleで開発されたオープンソースのプログラミング言語です。

0グッド

0クリップ

投稿2020/10/09 09:18

以下のような構造体が外部パッケージに定義されていました。

go

1type Request struct { 2 Data struct { 3 Attributes *struct { 4 Name string `json:"name"` 5 } `json:"attributes"` 6 Type string `json:"type"` 7 } `json:"data"` 8}

これを初期化をして、Nameにデータを入れたいのですが以下のようにしてもうまくいきません。

golang

1req := external.Request{} 2req.Data.Attribute.Name = "me"

nilパニックになってしまいます、おそらくAttributes *structが構造体のポインタであるからだと思っています。
しかし、これをどのようにうまく初期化できるのかわかりません。

ご教授いただけませんでしょうか。よろしくおねがいします。

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

回答1

0

以下のように初期化できます。想定されているように構造体を初期化する必要があります。

とはいえ struct の中に struct を入れ子にするような構造体が定義されていて、コンストラクタなどが定義されていないと扱いにくいかなと思います。

go

1package main 2 3import ( 4 "encoding/json" 5 "fmt" 6) 7 8func main() { 9 req := Request{ 10 Data: struct { 11 Attributes *struct { 12 Name string `json:"name"` 13 } `json:"attributes"` 14 Type string `json:"type"` 15 }{ 16 Attributes: &struct { 17 Name string `json:"name"` 18 }{ 19 Name: "aaa", 20 }, 21 Type: "ttt", 22 }, 23 } 24 25 s, _ := json.Marshal(req) 26 27 fmt.Println(string(s)) 28} 29 30type Request struct { 31 Data struct { 32 Attributes *struct { 33 Name string `json:"name"` 34 } `json:"attributes"` 35 Type string `json:"type"` 36 } `json:"data"` 37}

https://play.golang.org/p/Ypav_WzyMGj

  • 出力

bash

1{"data":{"attributes":{"name":"aaa"},"type":"ttt"}}

投稿2020/10/09 10:04

d_tutuz

総合スコア730

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

まだベストアンサーが選ばれていません

会員登録して回答してみよう

アカウントをお持ちの方は

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.46%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問