概要
初めてちゃんとgo言語を使ったので気が付いたところをメモ。 go言語を普段から使っている人には当たり前のことになるかもだけど。
関数の返り値について
関数の返り値が複数ある場合、例えばc#ならタプル(tuple)を使って
(string name, int age) val = GetTuple();
のようになる。返り値の受け皿のタプルを設定する必要があるので面倒なのだけど、go言語であれば
html, err = page.HTML()
こんな感じで、単に二つ並べればよいので気軽に使える。 今のrodライブラリの場合も、"Must"キーワードを付けない関数の場合、上記例のようにエラーを二つ目の返り値で取得する構成が多かったと思う。
アンダースコア関数
関数の返り値に関連して、返ってきた値を使わない場合にはアンダースコア関数を利用する。例の場合だと二つ目の値は使わ(使え)ない
html, _ = page.HTML()
Go言語は割り当てた変数の扱いが雑にできなくて、とりあえず適当に変数を割り当てて使わない。なんてことをすると
(変数名) declared but not used
というエラーがでて、実行できない。ワーニングが出るだけでとりあえず実行はできる。ではなくて。エラーで実行不可。ちょっと厳しいと感じた。
MustElementとElement
ここはrodライブラリのお話
日本語で得られたrodライブラリのサンプルでは、MustElementのようにMustのプレフィックスが付く関数が多い。確認するとMust無しの関数(MustElementの場合はElement)も存在するよう。Must有りの関数群は
- 引数は必要最小限になっている。
- なんらかの場合にerrorになると、panicで終了してくれる。Must無しの場合はだいたい2つの返り値を持ち、二つ目の返り値がエラーの情報を持っている。
という特徴があり、ちょっとした小物を作成するときには便利かと思う。逆にエラー処理とかを自前でやるにはMust無しで作成していく必要がありそう。 今回の再起動の例の場合は、HTMLを取得するところだけMust無しを利用した。