生涯未熟

プログラミングをちょこちょこと。

Go1.9に追加されるtype aliasを使って遊んでみる

Go1.9で追加されるtype aliasに無限の可能性を感じたので、ちょっと遊んでみます。

type aliasとは?

types aliasは型のエイリアスです。
ちょっとそれだけでは雑な説明なので、コードを見てみましょう。

基本的なシンタックスはこんな感じです。

named type(名前付き型)に似てますね。
で、type aliasの特性として 同じ型の名前付き型に代入可能 というものがあります。

例えば以下のような感じのことが実現できます。

元の型が同じならどんな名前付き型にも代入可能ということが分かりますね。

これを見た時に「package毎に分かれた構造体を上手いこと扱えるんじゃないか」と思いました。

遊んでみる

どういう事かというと、まず以下のようなストラクチャを考えてみます。

f:id:syossan:20170730032126p:plain

ここでの main.go の役割は、

  • config.goから設定を取得する
  • action.goへ設定を渡す

といったものとします。
config.go は言わずもがな、設定ファイルの config.toml から設定の取得。
action.go は設定を受け取ってほげほげする、という感じですね。

では、まずはtype aliasを使わない形でザクザクっと組んでいきます。

実行すると sample と表示されます。
type aliasを使わないパターンだと、一度構造体をjson形式にして各パッケージでやり取りするってのが一番良いのかな〜?と今のところ思っとります。(何か他に妙案がある方は教えてください)

これをtype alias使って書き直してみましょう。

こんな感じですかね。
type aliasであれば、あるパッケージから取得した構造体をそのまま別のパッケージの構造体に引き渡せれるので、結構便利ですね。

ただし、 config.go の構造体を以下のようにした時はエラーになりました。

f:id:syossan:20170730044808p:plain

どうも、type aliasのネストされた構造体を使っても上手く変換してくれないのか、色々試してもエラーが解消されずでした🤔

まとめ

こんな感じで、type aliasを見た時に閃いた使い方がこれでした。
ただ、Goの開発陣として想定している使い方とはかなり違うと思うのですが、他にも色々と活用できそうな感じがするので早くGo1.9来てくれ〜