#golang の revel でConfigをControllerで読もうとしてハマったはなし
Golangが熱いので最近触り始めました。
revel を使ってるんですが、とりあえずTwitterのOAuthサンプル 的なのをやってみようと思って、API-KEYとSecret-Keyを取得。
サンプルだとコントローラ内にベタ書きされてたけど流石にそれはいけてねぇよな、app.confとは別のconfにもたせよう、としたところで悲しいエラーが出て悲しい感じに悲しみました。
動くようになったコードが以下でし。
//抜粋 package controllers import ( "github.com/revel/revel" "fmt" "os" ) var apiKey string = "" var secretKey string = "" func init (){ revel.OnAppStart(func(){ if twitterConf, err := revel.LoadConfig("twitter.conf"); err != nil { fmt.Printf("TwitterConf load failed. [%v]", err); }else { apiKey, _ = twitterConf.String("twitter.apikey") secretKey, _ = twitterConf.String("twitter.secretkey") } if apiKey == "" || secretKey == "" { fmt.Println("Twitter API|SECRET KEY must be set on twitter.conf .") os.Exit(1) } }) }
- ハマったポイント
- ifで初期化した変数がifのブロック内でしか有効じゃないぽい?
- revel.OnAppStart 内でやらないとConfigのLoadで死ぬ
runtime error: invalid memory address or nil pointer dereference
みたいなエラー出る
Goむずい。まだむずい。俺にとってむずい。がんばる。