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

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

新規登録して質問してみよう
ただいま回答率
85.35%
Go

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

MySQL

MySQL(マイエスキューエル)は、TCX DataKonsultAB社などが開発するRDBMS(リレーショナルデータベースの管理システム)です。世界で最も人気の高いシステムで、オープンソースで開発されています。MySQLデータベースサーバは、高速性と信頼性があり、Linux、UNIX、Windowsなどの複数のプラットフォームで動作することができます。

API

APIはApplication Programming Interfaceの略です。APIはプログラムにリクエストされるサービスがどのように動作するかを、デベロッパーが定めたものです。

Q&A

解決済

1回答

1504閲覧

GoでDB操作していたらSQLが2重で走っている挙動になる

kagepedia

総合スコア16

Go

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

MySQL

MySQL(マイエスキューエル)は、TCX DataKonsultAB社などが開発するRDBMS(リレーショナルデータベースの管理システム)です。世界で最も人気の高いシステムで、オープンソースで開発されています。MySQLデータベースサーバは、高速性と信頼性があり、Linux、UNIX、Windowsなどの複数のプラットフォームで動作することができます。

API

APIはApplication Programming Interfaceの略です。APIはプログラムにリクエストされるサービスがどのように動作するかを、デベロッパーが定めたものです。

0グッド

0クリップ

投稿2020/05/14 08:44

編集2020/05/14 08:46

利用しているパッケージ

"database/sql" "github.com/go-sql-driver/mysql"

go

1func HandlerIndex(w http.ResponseWriter, r *http.Request) { 2 nowTime := time.Now() 3 const format = "2006/01/02 15:04:05" 4 nowTime.Format(format) 5 db := util.Sqlhandler() 6 defer db.Close() 7 ins, err := db.Prepare("INSERT INTO t_task (task,created_at,updated_at) VALUES (?,?,?)") 8 if err != nil { 9 http.Error(w, err.Error(), http.StatusInternalServerError) 10 return 11 } 12 defer ins.Close() 13 ins.Exec("task-2020", nowTime, nowTime) 14}

DBを呼び出す関数を以下のように記述しています。

db := util.Sqlhandler()

一回APIを叩きに行くと2回INSERTされています。
違うエンドポイントのUPDATEの処理の際にもINSERTがされていました。
GoにおけるMySQL(DB)操作について教えて欲しいです。

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

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

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

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

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

guest

回答1

0

ベストアンサー

2点アドバイス。

  • いちど、ハンドラ先頭でログ出力を入れてみて本当に1回だけ呼ばれているのか確認してみましょう。
  • あと、ins.Execの返値のエラーをハンドリングしましょう。

投稿2020/05/14 09:12

nobonobo

総合スコア3367

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

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

kagepedia

2020/05/14 13:35 編集

_, err := ins.Exec("task-2020", nowTime, nowTime) if err != nil { http.Error(w, err.Error(), http.StatusInternalServerError) return } このようなエラーハンドリング加えたら処理が止まりウェブ上にエラー表示もなく。。。
nobonobo

2020/05/15 04:34

そのハンドリングはAPIクライアントへまるなげしている状態なのでクライアントがエラーを検出して表示をする必要があります。 単純にlog.Print(err)を入れてみればサーバーサイドのログを見ることで何が問題なのかが見えてくると思います。
kagepedia

2020/05/18 01:34

解決しました。 ありがとうございます。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.35%

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

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

質問する

関連した質問