12327


今GoでWebAPIを作成しているのですが、以下の構成の場合、handlers/inqueryHandlers.goやhandlers/proxyHandlers.go内でデータベースからデータを取得してレスポンスを返すので、handlersパッケージないでデータベースを初期化しようと考えたのですが、handlersパッケージないで`_"github.com/lib/pq"`をするとmainまたはtestパッケージ以外ではしないべきとlintに引っかかります。この場合どこでデータベースを初期化すればいいのでしょうか?
データベースはpostgresqlです。

[code]

    ├── handlers
    │   ├── inqueryHandlers.go
    │   └── proxyHandlers.go
    ├── loger.go
    ├── main.go
    ├── model
    │   └── inquery.go
    ├── router.go
    └── routes.go
    
[/code]


CC BY-SA 3.0
2015-07-13T12:53:02.047
12324
2015-07-13T15:23:58.193
2015-07-13T13:03:08.450
7232
7232
question
go postgresql
Goのデータベース接続はどこに書けばいいのでしょうか。


`golint`がメッセージを出す理由については、作者がこのようにコメントしています。

<https://github.com/golang/lint/issues/79#issuecomment-57747891>

> Because it makes it impossible to use such a package with a different  
>  dependency (e.g. a different MySQL driver), and slows down the build  
>  because the program must be built from the bottom up. Underscore  
>  imports should normally be in the main package, or you should add a  
>  comment explaining why the package needs to do the underscore import.

アンダースコアで始まるimportは普通グローバルな状態に副作用を及ぼしますから、下層のパッケージで好き勝手に行うとトラブルのもとになります。ですから、通常は`main`に書いたほうが良いということになります。

今回の場合も`main`に書けば問題はないと思います。

ちなみに`golint`は

> a blank import should be only in a main or test package, or have a comment
> justifying it

と言っていますので、コメントを書けば`main` `test`以外でも黙ります。

[code]

    import (
        // PostgreSQL driver
        _ "github.com/lib/pq"
    )
    
[/code]


CC BY-SA 3.0
2015-07-13T13:59:59.303
12327
2015-07-13T15:23:58.193
2015-07-13T15:23:58.193
3639
3639
12324
answer