ランディネットワークの BLOG

Ubuntu 19.04 に新しいバージョンの Go (プログラミング言語)をインストールする

Created at:
Category: Go

最近は、時間を作って Hugo のテンプレートを書きまくってます。 Hugo の最新版を試してみたくて Go をインストールしたり、少しずつ Go の使い方もわかってきました。

そんなことをしていると、リニューアルした BLOG の投稿ネタとして、 Go の勉強を記録していけばいいんじゃないかと思うようになりました。

ちょうど Goを書き始める前に調べたあれこれまとめ (Qiita) という記事も見つけたところなので、これを参考に進めていこうと思っているところです。

まずは、事務所の Ubuntu マシンに Go をインストールしたときに気づいたことなどをまとめてみます。

しかし、 Gopher は可愛いw

Gopher のイラスト
Gopher のイラスト by Renee French / CC BY 3.0

apt を使ってインストールする

apt コマンドを使って Go をインストールしてみます。

sudo apt install golang

インストールが出来たかどうかはコマンドラインで以下のコマンドを実行して確認します。 結果が /usr/bin/go であればインストール出来ています。

which go

また、バージョンは以下のコマンドで表示されます。

go version

現時点での Ubuntu 19.04 での Go はバージョン 1.10.4 のようです。

ubuntu% go version
go version go1.10.4 linux/amd64

さて、 Hugo は 1.11 以上じゃないと動作しない感じなので、 1.11 や 1.12 をインストールしてみます。

sudo apt install golang-1.11 golang-1.12

でもこれだけじゃ検索パス上にインストールされないため、新しいバージョンの Go は動作しません。

ubuntu% type -a go
go is /usr/bin/go
go is /bin/go
ubuntu% /usr/bin/go version
go version go1.10.4 linux/amd64
ubuntu% /bin/go version 
go version go1.10.4 linux/amd64

go1.12 みたいなそれっぽいコマンドもありません。

ubuntu% ls /usr/bin/go*
/usr/bin/go  /usr/bin/gofmt  /usr/bin/gold
ubuntu% ls /bin/go*
/bin/go  /bin/gofmt  /bin/gold

追加でインストールした go-lang-1.11go-lang-1.12 はコマンド検索パスに追加するか、

export PATH=/usr/lib/go-1.12/bin:$PATH

(バージョン 1.11 の Go を使う場合)

export PATH=/usr/lib/go-1.11/bin:$PATH

シンボリックリンクを張る必要があるようです。

ln -s /usr/lib/go-1.12/bin/go ~/bin/go
ln -s /usr/lib/go-1.12/bin/gofmt ~/bin/gofmt

apt を使って go-1.13 をインストールするには

新規インストールの場合も、上記手順でインストールした後の場合も、 apt install golang で 1.13 がデフォルトの Go のバージョンになります。

sudo add-apt-repository ppa:longsleep/golang-backports
sudo apt update
sudo apt install golang

バージョン 1.13 がインストールされたかどうかを確認してみましょう。

ubuntu% /usr/bin/go version
go version go1.13.1 linux/amd64

うまくいったようです。

Go の機能を使ってインストールする

既に Go をインストールしている環境で、その他のバージョンも実行できるようにする仕組みが Go には初めから存在しています。

ここでの説明は、 go コマンドと git コマンドがインストールしてあるものとして進めます。

まずは、ライブラリのインストールコマンド go get を利用して、バージョン 1.10.8 の Go をインストールします。

go get golang.org/dl/go1.10.8

ここで、環境変数 PATH に $HOME/go/bin が入っていることを確認して下さい。入っていない場合、この後のコマンドが実行できません。

または、 which コマンドで確認してみてください。 go1.10.8 が見つからないというエラーが表示された場合は、環境変数 PATH を見直して下さい。

ubuntu% which go1.10.8
go1.10.8 not found

環境変数が正しく設定されていることを確認したら、関連ファイルのダウンロードとインストールを開始しましょう。

以下のコマンドを実行しするとダウンロードとインストールがおこなわれます。

go1.10.8 download

正しくインストールされたことを確認してみましょう。

go1.10.8 version

以下のように表示されていれば、インストールは成功です。

ubuntu% go1.10.8 version
go version go1.10.8 linux/amd64

先程の download コマンドが実行されていない場合は、以下のように download を実行しろというエラーメッセージが表示されます。

ubuntu% go1.10.8 version
go1.10.8: not downloaded. Run 'go1.10.8 download' to install to /home/miyabe/sdk/go1.10.8

インストール可能なバージョンの一覧は、 ダウンロードページ で確認できます。

特定のバージョンを削除する

以下のコマンドを実行し、インストールされているディレクトリを探します。

go1.10.8 env GOROOT

私の環境では以下のように表示されます。

ubuntu% go1.10.8 env GOROOT
/home/miyabe/sdk/go1.10.8

GOROOT に設定されているディレクトリをまるごと削除します。

下記のコマンドを実行します。

rm -r /home/miyabe/sdk/go1.10.8

さらに go1.10.8 コマンドも消してしまってもいいでしょう。

rm /home/miyabe/go/bin/go1.10.8

コンパイル・実行を試す

$HOME/go/src/hello というディレクトリを作成し、 hello.go というファイル名で以下のソースコードを入力します。

package main

import "fmt"

func main() {
	fmt.Printf("hello, world\n")
}

$HOME/go/src/hello というディレクトリで以下のコマンドを実行して下さい。

まずは build (実行形式のファイルを作成)をおこないます。

go build

build が終わったら実行です。

./hello

以下の結果が表示されるはずです。

ubuntu% ./hello 
hello, world

何もエラーが表示されなければ、問題なくインストールできていると判断しても良さそうです。

参考文献