問題タブ [sqlx]
For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.
postgresql - sqlx.Connect() が docker alpine:latest でスタックする
次のコードに減らすことができたという問題があります。
コードとその他の説明を含むレポを次の場所に設定しました。
https://github.com/mraxus/mystery-golang-alpine
上記のプログラムと postgres db の両方が別のコンテナーにある docker イメージ (ここではgolang:latest
) throughtで有効な DB url を使用してこの Go コードをビルドして実行すると、プログラムは期待どおりに実行されます。docker-compose
docker-compose
ただし、ベース イメージを使用して同じセットアップ () で同じプログラムを実行するとalpine:latest
、プログラムは sqlx.Connect() でスタックします。
これがなぜなのかわかりません。あなたは知っていますか?私はプロジェクトをセットアップして、他の人が私と同じ問題を再現して取得できるかどうかを確認しました。
https://github.com/mraxus/mystery-golang-alpine
この問題を解決するのに役立ついくつかの洞察を聞くのが大好きです.
私のシステムの詳細:
- macOS 10.12.6 (シエラ、MBP Mid 2015 15 インチ)
- ドッカー 17.06.1 1-ce-mac24
go - jmoiron/sqlx、...interface{}、ボイラープレートの抽象化
少し「賢く」なり、ボイラープレートSQLコードの一部を抽象化しようと思いました(sqlxを使用 - https://github.com/jmoiron/sqlx)。アイデアは、結果を処理するための関数ポインターをコードにフィードし、行を生成する SQL 文字列と引数を渡すことです。たまたま、「sqlArgs インターフェイス」のものを削除すれば、コードは正常に機能しますが、「より賢い」形式ではステートメントでエラーが発生します
sql: Exec 引数 $1 を変換しています タイプ: サポートされていないタイプ []interface {}、インターフェイスのスライス
ここに 2 つのバージョンがあります。最初のバージョンではエラーが発生し、2 番目のバージョンでは機能しますが、パラメーター化されていません。
アイデアは、コードを次のように呼び出すことです。
私のコードは実際には呼び出しから呼び出しへと userID を通過するのではなく、SQL パッケージが処理できない []interface{} を通過すると思います。しかし、それについてはよくわかりません。いずれにせよ、このアイデアを実現する方法はありますか? ありがとう。