運用中のGoのバージョンを上げてみた
半年前のリベンジ
golang 1.14から1.18の間でpostgresのドライバーが入らなくなった件
半年前にバージョンアップにトライしたのですが、入らなくて断念しました。
今回改めて挑戦しました。
今までpostgresのドライバーとして使っていた以下のレポジトリを使っていました。
このREAD.MEを見る限り
いつも通り定番のgo getでインストールできると思いきや。。
go get github.com/lib/pq
go: go.mod file not found in current directory or any parent directory.
'go get' is no longer supported outside a module.
To build and install a command, use 'go install' with a version,
like 'go install example.com/cmd@latest'
For more information, see https://golang.org/doc/go-get-install-deprecation
or run 'go help get' or 'go help install'.
のメッセージ
なので、エラーで言われた通りのコマンドを実行
go: 'go install' requires a version when current directory is not in a module
Try 'go install github.com/lib/pq@latest' to install the latest version
のメッセージなので、それにならって
go install github.com/lib/pq@latest
go: downloading github.com/lib/pq v1.10.6
package github.com/lib/pq is not a main package
??なんのこっちゃ?
てなって
とりあえず
go build
go: go.mod file not found in current directory or any parent directory; see 'go help modules'
適当な go.modを作成して
go install github.com/lib/pq@v1.10.6
package github.com/lib/pq is not a main package
結局 is not a main packageは出たままから進めず
READ.MEにヒントが書いてあった
github.com/lib/pq のREAD.MEの最後の方に
を使った方がいいよって事が書いてあった事を判明
go install github.com/jackc/pgx/v4@latest
go: downloading github.com/jackc/pgx v3.6.2+incompatible
go: downloading github.com/jackc/pgx/v4 v4.16.1
go: downloading github.com/jackc/pgconn v1.12.1
go: downloading github.com/jackc/pgio v1.0.0
go: downloading github.com/jackc/pgproto3/v2 v2.3.0
go: downloading github.com/jackc/pgproto3 v1.1.0
go: downloading github.com/jackc/pgtype v1.11.0
go: downloading github.com/jackc/chunkreader/v2 v2.0.1
go: downloading github.com/jackc/chunkreader v1.0.0
go: downloading github.com/jackc/pgpassfile v1.0.0
go: downloading github.com/jackc/pgservicefile v0.0.0-20200714003250-2b9c44734f2b
go: downloading golang.org/x/crypto v0.0.0-20210711020723-a769d52b0f97
go: downloading golang.org/x/text v0.3.7
package github.com/jackc/pgx/v4 is not a main package
なんか色々入っている感じのメッセージの最後に
package github.com/jackc/pgx/v4 is not a main package
って出て、じゃぁ、このメッセージはそんなに問題じゃない!?
ってなり。
github.com/jackc/pgx/v4 に記載しているサンプルコードをコピペして実行
go run main.go
main.go:8:2: github.com/lib/pq@v1.10.6: missing go.sum entry; to add it:
のメッセージなので下記コマンドを実行
go mod download github.com/lib/pq
エラーがない! もう一度
go run main.go
main.go:8:2: no required module provides package github.com/jackc/pgx/v4; to add it:
go get github.com/jackc/pgx/v4
go get github.com/jackc/pgx/v4
エラーなしのメッセージ
go: added github.com/jackc/chunkreader/v2 v2.0.1
go: added github.com/jackc/pgconn v1.12.1
go: added github.com/jackc/pgio v1.0.0
go: added github.com/jackc/pgpassfile v1.0.0
go: added github.com/jackc/pgproto3/v2 v2.3.0
go: added github.com/jackc/pgservicefile v0.0.0-20200714003250-2b9c44734f2b
go: added github.com/jackc/pgtype v1.11.0
go: added github.com/jackc/pgx/v4 v4.16.1
go: added golang.org/x/crypto v0.0.0-20210711020723-a769d52b0f97
go: added golang.org/x/text v0.3.7
go run main.go
Unable to connect to database: failed to connect to `host=/tmp user=root database=`: dial error (dial unix /tmp/.s.PGSQL.5432: connect: no such file or directory)
exit status 1
このエラーは接続できませんって事でGoのモジュールに関してのエラーではないのでクリアできたのではと思います。
is not a main package っていうメッセージがエラーだと思ってました
が、今思えばエラーでもなんでもなく lib/pq だけでドライバー事たりてたかもです。
まぁ、なにはともあれ。これで最新バージョンにアップグレードできました。
複数バージョン共存
既存のLinux OSのGoのバージョンをいきなりアップグレードは怖いので、まず複数バージョンの状態にします。
複数バージョンが可能になって、新しい方でも動く事が確認できればそちらでbuildします。
このやり方でやってみます。
まずは違うバージョンのGoをインストールします。
18はインストールしてしまったので、14でもない18でもない17で試します。
形式はgo install golang.org/dl/go<ヴァージョン>@latest
だそうです。
go install golang.org/dl/go1.17.12@latest
エラーなくインストールされました。
go<ヴァージョン> downloadの形式でダウンロードするみたいです
go1.17.12 download
go1.17.12 command not found
から進まずこのやり方は断念
3時間ぐらいググったけど解決策は見当たらず。。
単純にフォルダ展開
なので、https://go.dev/dl/ からwgetでダウンロードするやり方を採用
ダウンロードして解凍したディレクトリを /usr/local/go17/ におく
/usr/local/go17/bin/go run main.go
でヴァージョン1.14で作ったレポジトリを git pullして
何回かビルドを試す。
- 相対パスで書いてるところを絶対パスにする
- go mod init、go mod tidyでgo.mod, go.sumを生成
/usr/local/go17/bin/go run main.go
でビルドが通った👍
感想
なので、このやり方で複数バージョンの共存ができました。
PHPで複数バージョンの共存に挑戦した時はfpmとか各ライブラリのバージョンまで合わせきれずに諦めた経緯があります
しかし、今回Goの複数バージョン共存はうまくいきました。
込み入った開発をしていないだけに今のところはですが。。。
何か不具合があればおいおいここで追記していきます。
登録日:
更新日: