GoのプログラムからPostgreSQLサーバ(Docker版)にアクセスすることができました。

can’t find package “github.com/lib/pq”

と、

Dockerで作ったpostgreSQLへの外部クライアントからのアクセス方法

を実施して、GoのプログラムからPostgreSQLサーバ(Docker版)にアクセスすることができました。

/*
go build -gcflags "-N -l" main.go

uft-8でセーブ

まず、以下の手順でテーブルを作っておく
 
C:\Users\yrl-user>psql -h localhost -U postgres	

postgres=# create database blogapp;

postgres=# \l		
postgres=# \connect blogapp(データベース名)
 
以下をコピペしてテーブルとその内容を直接書き込む
 
create table users (
	   id serial primary key,
	   name varchar(255),
	   score real,
	   team varchar(255)
					);
 
insert into users (name, score, team) values
('taguchi', 5.5, 'red'),
('fkoji', 8.3, 'blue'),
('dotinstall', 2.2, 'blue'),
('sakaki', 5.0, 'green'),
('sasaki', 4.6, 'red'),
('kimura', 4.7, 'green');
 
blogapp=# \dt
blogapp=# \d users(テーブル名)
 
データベースのテーブルの中身を確認する
blogapp=# select * from users; // 検索の基本形
 
*/



package main

import (
    "fmt"
    "database/sql"
    _ "github.com/lib/pq"
    "os"
)

// ----------------------------------------------------------------

func checkError(err error) {
	if err != nil {
		fmt.Fprintf(os.Stderr, "fatal: error: %s", err.Error())
		os.Exit(1)
	}
}

func main() {
    fmt.Fprintln (os.Stderr,"*** start ***")

	db, err := sql.Open("postgres", "user=postgres dbname=blogapp password=c-anemone sslmode=disable")

	checkError(err)
    defer db.Close()

	sql_str := "select id,name,score,team from users order by id"

    rows, err := db.Query(sql_str)
    if err != nil {
        fmt.Println(err)
        }

    defer rows.Close()

    for rows.Next() {
        var id string
        var name string 
        var score float32
        var team string 
        if err := rows.Scan(&id,&name,&score,&team); err != nil {
            fmt.Println(err)
        }
        fmt.Printf ("%s\t%s\t%f\t%s\n",id, name,score,team)
    }

    if err := rows.Err(); err != nil {
        fmt.Println(err)
        }

    fmt.Fprintln (os.Stderr,"*** end ***")
}

出力結果

*** start ***
1	taguchi	5.500000	red
2	fkoji	8.300000	blue
3	dotinstall	2.200000	blue
4	sakaki	5.000000	green
5	sasaki	4.600000	red
6	kimura	4.700000	green
*** end ***

ようやく一安心できました。

2020/05,江端さんの技術メモ

Posted by ebata