interface{}をstructにマッピングするGoその5の続きmpon/xgodeprojPBXFileReferenceisaが特定できるようになったので、どれか一つのisaのjsonをパースしてみる。なんのファイルがあるかのisaはPBXFileReferenceでこれは必ずこういう形をしてる。(※進めていくうちに気づいたけどしてなかった。"<group>"}これなら型にできそう。golangの型golangにはクラスという概念がないっぽい。分からないけどそんな雰囲気と仮置きしておいてとりあえず先に進む。string}構造体を初期化するやり方は色々あるようだ。初期化しようと思ってるんだけど、ループで回してるバリューがinterface{}なのでキャスト、どうすればいいかわからない。これがまさにそうだったらしい。ここにやり方まとまってる。全部で3パターンやり方がある。俺が今までやってたのは危険なキャストの仕方を使ってたようだ。間違えると、panicを起こす。安全なキャストは、第2返却値をもらうようにする。キャストがうまくいかなかったかが分かる。一つはswitchで考えうる限りの型チェックもできる。TPOによって使えばよさそう。fmt.Println("unknown")}swiftのas?に似てるかもしれない。println(i)}で、いざやってみたらやっぱりPBXFileReferenceは決まった型じゃないことが分かった。mapのkeyがないとpanicになるようだ。これも、さっきのキャストみたいに、第2返り値で安全にチェックできるようだ。string}そして、mapでとるときに安全にとる。なんかちゃっと調べたけどなさそう。ジェネリクスみたいのできないのかな。""}そして、ようやくそれっぽいのができた。コマンドラインのフラグで分けるで、今のままだとセクションを指定してその情報を見るみたいなことができない。Flagというやつでできるっぽい。commands.goのFlagsに以下のように追加する。},}使う側では、こんな感じで取得できる。c.String("section")この辺りを組み合わせて結果的にこうなった。それっぽくなってきたぞ。PBXFileReferenceSampleTests.xctestBase.lproj/LaunchScreen.xibImages.xcassetsBase.lproj/Main.storyboardAppDelegate.swiftSample.appInfo.plistInfo.plistSampleTests.swiftViewController.swiftここまでの感想interfaceに対して実装する、継承できないっていうのswiftのPOPに似てるかもと思った。キャストのやり方分かった。みたいな感じってことが分かってきたswitchが便利だ。ツイートはてなブログをはじめよう!masato47744さんは、はてなブログを使っています。ブログを報告するスターをつけました引用をストックしましたストック一覧を見る閉じる引用するにはまずログインしてくださいログイン閉じる引用をストックできませんでした。再度お試しください閉じる限定公開記事のため引用できません。