🎄teratailクリスマスプレゼントキャンペーン2024🎄』開催中!

\teratail特別グッズやAmazonギフトカード最大2,000円分が当たる!/

詳細はこちら
Go

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

PostgreSQL

PostgreSQLはオープンソースのオブジェクトリレーショナルデータベース管理システムです。 Oracle Databaseで使われるPL/SQLを参考に実装されたビルトイン言語で、Windows、 Mac、Linux、UNIX、MSなどいくつものプラットフォームに対応しています。

Q&A

解決済

1回答

2341閲覧

Goでstructの値をDBに登録したい

naomaru

総合スコア2

Go

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

PostgreSQL

PostgreSQLはオープンソースのオブジェクトリレーショナルデータベース管理システムです。 Oracle Databaseで使われるPL/SQLを参考に実装されたビルトイン言語で、Windows、 Mac、Linux、UNIX、MSなどいくつものプラットフォームに対応しています。

0グッド

0クリップ

投稿2020/12/05 16:35

編集2020/12/06 09:43

実装したいこと

Go言語の初歩的なところを勉強していますが、解決できないので質問させてください。。

structに入っている値をDB(postgres)に挿入したいです。

試したこと

テーブルの型に合わせてstructを宣言しました。
type Test struct {
col_a int
col_b int
col_c string
}

その後structの初期化で以下を行いました。

XX := Test {
col_a: 10,
col_b: 20,
col_c: "test",
}

// Testを受け取ってInsertをしたのですが、
func Insert(XX Test) {
db, _ := sql.Open("postgres",***(db情報))

var col_a string query := "INSERT INT dbname(col_a, col_b, col_c)" query += "VALUES($1,$2,$3) RETURNING col_a" err = db.QueryRow(query, XX).Scan(&col_a)

}

上記コードを走らせると「converting argument $1 type: unsupported type…」と出て、型が違うとエラーが出ます。

上記コードの err = db.QueryRow(query, 10, 20, "test").Scan(&col_a)
とするとテーブルに値が挿入されているので、どうすればXX(struct)で挿入できるのかご教示頂けたら幸いです。

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

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

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

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

nobonobo

2020/12/05 22:49

情報が無さすぎてアドバイスしにくいです。動かなかったコードを貼って下さい。
naomaru

2020/12/06 09:42

失礼いたしました。 実際のコードで質問内容を更新したので、恐縮ですがご回答頂けたら幸いです。
guest

回答1

0

ベストアンサー

Test構造体の各フィールドがプライベートなのでデータベースライブラリからアクセスできません。

SQLにプレースフォルダを$1,$2,$3というように書いた場合、
db.QueryRow(query, V1, V2, V3)というように値を3つクエリ文字列の後に指定しなければなりません。

今回の場合は以下のように書く必要があるでしょう。

db.QueryRow(query, XX.col_a, XX.col_b, XX.col_c)

投稿2020/12/06 09:43

編集2020/12/06 12:24
nobonobo

総合スコア3367

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

naomaru

2020/12/06 10:10

ご回答頂きありがとうございます。 、、今のやり方ではできないってことですね。 もう少し勉強します。
naomaru

2020/12/06 13:48

再びご回答頂きありがとうございます。 ご教示いただいたコードで走らせたら無事にテーブルに値を登録することができました。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.36%

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

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

質問する

関連した質問