【Go言語】Ubuntu18.04へのGolang 1.11 の導入

Ubuntu18.04 への Golang 1.11 の導入
あくまでも Ubuntu 18.04 に対する Golang 1.11 での導入記録である。
Go 言語は開発途中の言語のため、異なるバージョンでは手順が違ってくることになる確率が高い。


f:id:dnkrnka:20180901012544p:plain:right

 

インストール手順

1. go のインストール状況を確認する

以下より、インストール未の状態であった。

% go version

Command 'go' not found, but can be installed with:

sudo snap install go       
sudo apt  install golang-go
sudo apt  install gccgo-go 

See 'snap info go' for additional versions.

 

2. 公式ページの手順に従って最新版をインストールする

公式ページより、次の2通りのインストール手順がある。

[A] バージョンを指定してインストールする

下記は 1.10 の場合の例。

% sudo add-apt-repository ppa:gophers/archive
% sudo apt-get update
% sudo apt-get install golang-1.10-go

 

[B] snap を使ってインストールする

下記の方法で最新版がインストールされる。

% sudo snap install --classic go

 

今回は [B] の snap を使う方法でインストールしたところ、以下の通り 1.11 がインストールされた。

% go version
go version go1.11 linux/amd64

% which go
/snap/bin/go

% ls -l /snap/bin/go
lrwxrwxrwx 1 root root 13  91 01:18 /snap/bin/go -> /usr/bin/snap*

 

3. Go言語の環境変数を設定する

 

現在の作業場を Go 開発環境とする場合

fish shell の場合

% set -x GOPATH (pwd)
% set -x PATH $PATH $GOPATH/bin

bash shell の場合

% export GOPATH=`pwd`
% export PATH=$PATH:$GOPATH/bin

 

Go 開発環境を固定する場合

$HOME/go が一般的な模様。従って以下のようにする。
 
fish shell の場合

$HOME/.config/fish/config.fish

set -x GOPATH $HOME/go
set -x PATH $PATH $GOPATH/bin

bash shell の場合

$HOME/.bash_profile あるいは $HOME/.bashrc

export GOPATH=$HOME/go
export PATH=$PATH:$GOPATH/bin

 

デバッグ

neko.go を「デバッグシンボルあり」「最適化なし」でビルドし、debug_neko という名前で実行ファイルを作成する。
その後、mainパッケージの main関数にブレイクポイントを設定する。

% go build -gcflags '-N -l' -o debug_neko neko.go
% gdb ./debug_neko
(gdb) b main.main

 

その他

タブ幅を変更するには?

gofmt のオプションで -tabwidth=8 や -tabs=false などを指定すれば良いとあるが、使い方が分からない。
従って、次のように変換すれば良い。

行頭にあるタブを半角スペース4個に変換する

% expand -i -t 4 piyo.go

 

トラブル

 

go get に失敗する

以下のようなログが出て失敗する場合。

% go get github.com/motemem/gore
# cd .; git clone https://github.com/motemem/gore /home/neko/go/src/github.com/motemem/gore
Cloning into '/home/neko/go/src/github.com/motemem/gore'...
fatal: could not read Username for 'https://github.com': terminal prompts disabled
package github.com/motemem/gore: exit status 128

 
Git v2.3 で追加された GIT_TERMINAL_PROMPT について - Qiita より、Git v2.3 から追加された GIT_TERMINAL_PROMPT を使ったユーザー入力スキップによる影響らしい。
GIT_TERMINAL_PROMPT が定義されていない、あるいは 0 の場合はユーザ入力がスキップされてしまうので、次のように 1 を定義してユーザ入力を受け付けてやるようにすれば良い。
fish shell の場合

$HOME/.config/fish/config.fish

set GIT_TERMINAL_PROMPT 1

bash shell の場合
$HOME/.bash_profile あるいは $HOME/.bashrc に以下を記述する。

export GIT_TERMINAL_PROMPT=1