【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