Open9
Go * OracleDB 周り
Oracle database と連携した Go アプリケーションを書きたいと思ったので調査&検証する。
参考情報
- Oracle DatabaseおよびOracle Cloud Autonomous Databaseを使用したGoアプリケーションの操作
- ドライバ関連 (すべて非公式ドライバ)
- sijms/go-ora: Pure go oracle client
-
godror/godror: GO DRiver for ORacle DB
- zig を使ったクロスコンパイル方法とかがドキュメントに載ってた(実際試してみたら簡単にできた
- ビルド時は不要だが、アプリケーションの実行時に Oracle Client libraries が必要になる
- mattn/go-oci8: Oracle driver for Go using database/sql
自分の想定している環境は Oracle Instant Client がインストールされているので godror がクロスコンパイルも簡単で良さそうかも。go-oci8 は pkg-config 周りがよくわかっていないし、godror で十分だったので使うモチベーションが湧かなかった...(いつか気が向いたら再チャレンジしたい
godror を使ったアプリケーションのクロスコンパイルは以下のようにした。cc に zig を選んでみた
例えば Windows 向け
CGO_ENABLED=1 GOOS=windows GOARCH=amd64 CC="zig cc -target x86_64-windows" CXX="zig cc -target x86_64-windows" go build -trimpath -o app.exe main.go
初回ビルドは少し時間かかるが、キャッシュが効けばあとは早い。
oracle client library のインストール
Ubuntuにインストールする方法
Docker: 参考になるやつ探し中. oracle-linux かなんかのイメージ使って、マルチステージビルドすればいけそうな気がする
Oracle DB に接続する Go アプリケーションの Dockerfile こんな感じかな??
技術要素
Oracle 関係のアプリケーション構築するときは素直に oracle linux 使うのが良さそう(特に開発用途なら
以下のエラーが出るので結局うまくいってない。。
failed to ping connection: ORA-00000: DPI-1047: Cannot locate a 64-bit Oracle Client library: "Dynamic loading not supported". See https://oracle.github.io/odpi/doc/installation.html#linux for help
コンテナ定義はここを参考にというかそのまま使ったのだが、それでもうまくいってない.
LD_LIBRARY_PATH
環境変数の値が悪いのかもしれないので調査してみる