logo
  • 現在做什麼
  • 關於我

Kalan

文章分類

  • 前端
  • 開發筆記
  • 雜談
  • 年度回顧

快速連結

  • 現在做什麼
  • 關於我
  • 聯絡我
  • 職涯思考🔗

關注我

在福岡生活的開發者,分享軟體開發與日本生活的點點滴滴。

© 2025 Kalan Made with ❤️. All rights reserved.

Goで接続が失われた場合の対処方法は?

作成者:カランカラン2019年1月15日 9:00
ホーム/開発ノート
💡

質問やフィードバックがありましたら、フォームからお願いします

英語原文

目次

    本文は台湾華語で、ChatGPT で翻訳している記事なので、不確かな部分や間違いがあるかもしれません。ご了承ください

    現在人気のある sql パッケージについて調査したところ、接続が失われた際に即座にエラーを通知する機能がほとんどないことに気付きました。例えば、nodejs の mysql では、connection.on(‘error’) を使用してエラーを監視できます。

    しかし、golang(少なくともいくつかの人気のあるパッケージ)には、そのような機能がありません。さらに深く探ると、その理由も理解できます。

    The sql package creates and frees connections automatically; it also maintains a free pool of idle connections. If the database has a concept of per-connection state, such state can be reliably observed within a transaction (Tx) or connection (Conn). Once DB.Begin is called, the returned Tx is bound to a single connection. Once Commit or Rollback is called on the transaction, that transaction's connection is returned to DB's idle connection pool. The pool size can be controlled with SetMaxIdleConns.

    簡単に言うと、sql.Open を呼び出すと、実際には接続が確立されず、内部で接続プールが管理され、必要なときにのみ接続を試みることになります。つまり、クエリを実行中にネットワークの問題で接続が失われた場合、database/sql は内部でリトライを試みてくれるのです。

    これに関してはありがたいことですが、クエリを実行して初めて接続が失われていることを知るのではなく、その前にアプリケーション全体がこの状況を把握できることを望んでいます。

    このようなことを実現したい場合、底層の Dialer ロジックを改修し、ネットワークが切断されたときに即座にプログラムに通知できるようにする必要があります。

    ← [golangノート] プロジェクトの環境変数を設定する方法CORS でのクッキーの取り扱い →

    この記事が役に立ったと思ったら、下のリンクからコーヒーを奢ってくれると嬉しいです ☕ 私の普通の一日が輝かしいものになります ✨

    ☕Buy me a coffee