GolangからPostgresに接続しようとしたらエラーが発生
Golangで以下のようなコードを書き、sqlドライバーを使用してDBに接続しようとした。
package main
import (
"database/sql"
"log"
"net/http"
"github.com/gin-gonic/gin"
)
func initDB() *sql.DB {
db, err := sql.Open("postgres", "user=ユーザー名 password=パスワード host=localhost port=5432 dbname=DB名 sslmode=disable")
if err != nil {
log.Fatalf("could not connect to database: %v\n", err)
}
err = db.Ping()
if err != nil {
log.Fatalf("could not connect to database: %v\n", err)
}
log.Println("DB connected successfully")
return db
}
func main() {
r := gin.Default()
db := initDB()
defer db.Close()
r.GET("/hello", func(c *gin.Context) {
c.JSON(http.StatusOK, gin.H{
"message": "hello",
})
})
r.Run()
}
いざ go run main.go を実行してすると、以下のエラーが発生した。
2021/12/05 01:59:35 could not connect to database: sql: unknown driver "postgres" (forgotten import?)
以下でこのエラーの解決手順を解説します。
Postgres接続エラーの解消
結論から言うと、パッケージのimportで以下の一文を追加し、
import (
"database/sql"
"log"
"net/http"
"github.com/gin-gonic/gin"
_ "github.com/lib/pq" // ←これを追記
)
ターミナルで以下のコマンドを実行したらエラーは解決することができました。
$ go get github.com/lib/pq
どうやら、database/sqlをインポートするだけではダメらしく、PostgreSQLのドライバーをインポートする必要もあるようです。(PostgreSQLを使う場合)
また、PostgresのDBドライバーをインポートする際はimport文の前に_(アンダーバー)を付けてインポートします。これは、database/sqlパッケージでは必要とされるものの、コード上では明示的に使用しないためです。