前提・実現したいこと
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/ツールのバージョンなど)
ここにより詳細な情報を記載してください。
回答2件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。