🏠 ホーム
フロントエンド
PHP
Go言語
プログラミングの理解
プログラマーへの道
Google API

運用中のGoのバージョンを上げてみた

  プログラミング >     Go言語 >  

半年前のリベンジ

golang 1.14から1.18の間でpostgresのドライバーが入らなくなった件

半年前にバージョンアップにトライしたのですが、入らなくて断念しました。

今回改めて挑戦しました。

今までpostgresのドライバーとして使っていた以下のレポジトリを使っていました。

https://github.com/lib/pq

この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の最後の方に

https://github.com/jackc/pgx

を使った方がいいよって事が書いてあった事を判明

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して

何回かビルドを試す。

/usr/local/go17/bin/go run main.go

でビルドが通った👍

 

感想

なので、このやり方で複数バージョンの共存ができました。
PHPで複数バージョンの共存に挑戦した時はfpmとか各ライブラリのバージョンまで合わせきれずに諦めた経緯があります

しかし、今回Goの複数バージョン共存はうまくいきました。
込み入った開発をしていないだけに今のところはですが。。。
何か不具合があればおいおいここで追記していきます。

 

登録日:

更新日:

by

コメント         tweetでコメント