【Golang】could not connect to database: sql: unknown driver “postgres” (forgotten import?) の解決方法

Golang

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パッケージでは必要とされるものの、コード上では明示的に使用しないためです。

タイトルとURLをコピーしました