Golang & PostgreSQLの開発環境構築してみた

この記事のゴール

VSCodeのDev Containerで構築したGolangとPostgreSQLの開発環境で、DBの接続ができる

WSL2、Dockerのインストール

以下の記事どおり、WSL2とDockerをインストールする。(Docker Desktop不要)

WindowsでもサクサクDocker (Docker on WSL2 without Docker Desktop)

VSCodeのDev Containerで開発環境をセットアップする

VSCodeの拡張機能をインストールする

作業用フォルダを作成し、VSCodeで開く

mkdir go-pg-work
cd go-pg-work
code .

Dev Containerの定義ファイルを作成する。

1.コマンドパレットで「Dev Containers: Add Dev Container Configuration Files」を選択する。

2.「Show All Definitions…」を選択する。

3.「Go & PostgreSQL」を選択する。

4.任意のバージョンを選択する。

5.追加機能のインストールはとりあえず不要でOK。

Golang & PostgreSQLの開発環境を整える

GolangからPostgreSQLへの接続処理を記述する

以下の処理を記述します。

1.main.goファイルを作成する。

touch main.go

2.DBへ接続する。
3.[user]テーブルを作成する。

カラム名
user_idserial
user_namevarchar(50)

4.テーブルに任意のレコードをINSERTする。

user_iduser_name
1太郎
2二郎
3三郎

5.テーブルに登録したレコードをSELECTする。

以下に該当のコードを記す。

package main

import (
	"database/sql"
	"fmt"
	"log"
	"strconv"

	_ "github.com/lib/pq"
)

const (
	// .devcontainerの.env参照
	HOST     = "localhost"
	DATABASE = "postgres"
	USER     = "postgres"
	PASSWORD = "postgres"
)

type User struct {
	Id   int    `db:"user_id"`
	Name string `db:"user_name"`
}

func main() {
	var connectionString string = fmt.Sprintf("host=%s user=%s password=%s dbname=%s sslmode=disable", HOST, USER, PASSWORD, DATABASE)
	db, err := sql.Open("postgres", connectionString)
	if err != nil {
		panic(err)
	}

	_, err = db.Exec("DROP TABLE IF EXISTS users;")
	if err != nil {
		panic(err)
	}

	_, err = db.Exec("CREATE TABLE users (user_id serial PRIMARY KEY, user_name VARCHAR(50));")
	if err != nil {
		panic(err)
	}

	_, err = db.Exec(`
		INSERT INTO
			users (user_name)
		VALUES
			('太郎'),
			('二郎'),
			('三郎')
	`)
	if err != nil {
		panic(err)
	}

	rows, err := db.Query("SELECT * FROM users")
	if err != nil {
		panic(err)
	}
	defer rows.Close()

	var user User
	for rows.Next() {
		err := rows.Scan(&user.Id, &user.Name)
		if err != nil {
			log.Fatal(err)
		}
		fmt.Printf("ID: %s, Name: %s\n", strconv.Itoa(user.Id), user.Name)
	}
}

go.modファイルを作成し、importを解決する

上記のコードのままだと、”github.com/lib/pq"が解決できないので、エラーとなってしまいます。

これを解決するために、go.modファイルを作成します。

go.modとは、Goモジュールのパスを書いておくファイルです。
このファイル以下の2つの方法で作成・更新されます。
1.go get コマンドでGoモジュールをインストールしたとき
2.go mod tity コマンドでimport文からGoモジュールをインストールしたとき

1.go.modファイルを作成する

go mod init {カレントディレクトリのパス}

2.以下のコマンドを実行し、Goモジュールをインストールします。
  (実行後、go.sumファイルが生成されます)

go mod tidy

ファイルの処理を実行する

1.以下のコマンドを実行し、ファイルの処理を実行します。

go run main.go

2.ターミナルにDBのSELECT結果が表示されれば成功です。

ID: 1, Name: 太郎
ID: 2, Name: 二郎
ID: 3, Name: 三郎

コメント

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