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 ***
ようやく一安心できました。