【Go】go getは不要?go installとは?
背景
最近企業でアルバイトをするときにgoを使っていて知識が曖昧だったのでまとめてみました。
go getとは
goのv1.16以前までの機能として、go.mod
の編集とバイナリ(ライブラリ)のインストールでした。しかし、v1.16からgo install
とgo get
に機能が別れました。go install
はバイナリ(ライブラリ)をインストールしgo get
はgo.mod
を編集するだけの機能になりました。
go getはgo mod tidyで代用できる。
go mod tidy
はgo.mod
に一括で必要なライブラリを追加したり不要なライブラリを削除したりします。つまりgo get
の機能を補完しているのでこれからは使う必要がないと思っています。
補足(バイナリについて)
バイナリについての補足をまとめておきます。バイナリとは一言で言うとgoの実行ファイルです。例えば、下記のgoファイルをgo run foo.go
で実行します。そうするとHello world!
が出力されます。これは何が起きているかを説明します。まずgoは下記のファイルを実行することができません。なので、goは以下のファイルを実行できるように実行ファイルを作成します。これがバイナリと言われるものです。goはこのバイナリファイルを実行して以下のHello world!
を出力します。
package main
import "fmt"
func main() {
fmt.Println("Hello world!")
}
go buildとは
ここでよく出てくるgo build
の説明をします。go build
とは、実行ファイルを作成するコマンドです。go build foo.go
を実行するとfoo
というでバイナリ(実行ファイル)が作成されます。中身がどんな感じかは調べてみてください。
実行ファイルを作ったあとにfoo
とコマンドで叩くとHello world!
と出力されます。つまりgo run foo.go
とはgo build foo.go
とfoo
を組み合わせたコマンドになります。
go installでインストールするのはバイナリです!!
ここで最初の話に戻りますが、go installでインストールするのはバイナリです。
例えば、go install github.com/volatiletech/sqlboiler/v4/drivers/sqlboiler-psql@latest
でsqlboilerのバイナリをインストールします。つまり、sqlboilerの実行ファイルをインストールします。その後にsqlboiler
とコマンドで叩くとインストールしたライブラリを実行することができます。
まとめ
いかがでしたでしょうか?少し説明がくどい部分もあったのですが、初学者にも伝わるように書きました。この記事で理解が深まれば幸いです。
Discussion