質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
87.20%
Amazon RDS

Amazon RDSは、米アマゾン社が提供しているRDBMSサービス。クラウド上でのリレーショナルデータベースの構築および運用が可能です。MySQL/PostgreSQL/Oracle/SQL Serverのインストールを容易にすることができます。

Go

Go(golang)は、Googleで開発されたオープンソースのプログラミング言語です。

解決済

postgreでselectしようとするとpanic

mimi_129
mimi_129

総合スコア63

Amazon RDS

Amazon RDSは、米アマゾン社が提供しているRDBMSサービス。クラウド上でのリレーショナルデータベースの構築および運用が可能です。MySQL/PostgreSQL/Oracle/SQL Serverのインストールを容易にすることができます。

Go

Go(golang)は、Googleで開発されたオープンソースのプログラミング言語です。

2回答

0評価

0クリップ

1210閲覧

投稿2021/08/28 08:02

前提・実現したいこと

GolangでRDS上のpostgreに接続してSELECTを行いたいのですが、上手くいきません。
何か必要な情報等ございましたら、随時追記していきますのでご指摘よろしくお願いします。

発生している問題・エラーメッセージ

Running ... /home/ec2-user/environment/main.go panic: runtime error: invalid memory address or nil pointer dereference panic: runtime error: invalid memory address or nil pointer dereference [signal SIGSEGV: segmentation violation code=0x1 addr=0x0 pc=0x4e4cb6] goroutine 1 [running]: database/sql.(*Rows).close(0x0, 0x0, 0x0, 0x0, 0x0) /usr/lib/golang/src/database/sql/sql.go:3155 +0x76 database/sql.(*Rows).Close(0x0, 0x0, 0x0) /usr/lib/golang/src/database/sql/sql.go:3151 +0x33 panic(0x65d900, 0x820fb0) /usr/lib/golang/src/runtime/panic.go:969 +0x1b9 database/sql.(*Rows).Next(0x0, 0x6e91c0) /usr/lib/golang/src/database/sql/sql.go:2835 +0x30 main.main() exit status 2 Process exited with code: 1 Pane is dead

該当のソースコード

package main import ( "database/sql" "fmt" _ "github.com/lib/pq" "log" ) const ( // Initialize connection constants. HOST = "RDSのエンドポイント:5432" DATABASE = "XXX" USER = "XXX" PASSWORD = "XXX" ) type Sale struct { Loginid string Password string } 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 { log.Fatalln("接続失敗", err) } defer db.Close() // 取得件数を条件[$1]にする // ?だとエラーが発生 //cmd := "select id, order_id from final_sales where id like $1" cmd := "select loginid, password from systemuser" //取得するデータが1件の場合は、QueryRowも利用できる rows, _ := db.Query(cmd) defer rows.Close() var sales []Sale // 取得するデータの構造体を用意(複数取得するのでスライス) for rows.Next() { var tmp Sale // 取得の格納用 err := rows.Scan(&tmp.Loginid, &tmp.Password) if err != nil { log.Fatalln("取得失敗", err) } sales = append(sales, tmp) } for _, sale := range sales { fmt.Println(sale.Loginid, sale.Password) } }

試したこと

ここに問題に対して試したことを記載してください。

補足情報(FW/ツールのバージョンなど)

ここにより詳細な情報を記載してください。

良い質問の評価を上げる

以下のような質問は評価を上げましょう

  • 質問内容が明確
  • 自分も答えを知りたい
  • 質問者以外のユーザにも役立つ

評価が高い質問は、TOPページの「注目」タブのフィードに表示されやすくなります。

気になる質問をクリップする

クリップした質問は、後からいつでもマイページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

teratailでは下記のような質問を「具体的に困っていることがない質問」、「サイトポリシーに違反する質問」と定義し、推奨していません。

  • プログラミングに関係のない質問
  • やってほしいことだけを記載した丸投げの質問
  • 問題・課題が含まれていない質問
  • 意図的に内容が抹消された質問
  • 過去に投稿した質問と同じ内容の質問
  • 広告と受け取られるような投稿

評価を下げると、トップページの「アクティブ」「注目」タブのフィードに表示されにくくなります。

まだ回答がついていません

会員登録して回答してみよう

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
87.20%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問

同じタグがついた質問を見る

Amazon RDS

Amazon RDSは、米アマゾン社が提供しているRDBMSサービス。クラウド上でのリレーショナルデータベースの構築および運用が可能です。MySQL/PostgreSQL/Oracle/SQL Serverのインストールを容易にすることができます。

Go

Go(golang)は、Googleで開発されたオープンソースのプログラミング言語です。