【GO】複数返値をグローバル変数に入れる


グローバル変数に入れたと思ったらローカル変数に入っていてランタイムエラーが起きることがあります。

グローバル変数の扱いと定義・代入の動作が妙に厳しくて多少工夫が必要だったので対策方法のメモ。

 

まずサンプルとしてdbをグローバルにして関数内で呼び出すコードです。

 

これは db, err := gorm.Open でローカル変数dbに代入されるためです。

複数返値は1つでも未定義変数があれば:=で代入と新規定義ができますが、グローバル変数は定義済みとして認識してくれません。

グローバル変数を明示的に指せればいいんですがそういったものはなさそうです。

この対策として3つの方法を試しました。

対策1

どちらも定義済み変数にしてしまえば代入でグローバル化できます。

ただerrのようなよく使う変数を使いまわすのはよくなさそう。

対策2

単純にローカル変数で受け取ってグローバルに渡す方法です。

今回の場合ポインタの代入なので一行増えるだけです。

対策3

1つの型定義として変数を使う。

一番正統派な気がする。

この場合でも:=を使った直接の代入はできないので注意。


コメントを残す

メールアドレスが公開されることはありません。