Help us understand the problem. What is going on with this article?

CentOS 7にyumでGoを入れてHello Worldするまで

More than 1 year has passed since last update.

環境

  • macOS 10.12.6
  • MacBook pro 2016
  • VirtualBox 5.2.18
  • CentOS 7.6-1810
  • Go 1.11.4

インストール方法

インストール方法はざっと調べると2つあります。
epelリポジトリをインストールして、goをyumでインストールする方法
・公式からtar圧縮ファイルをダウンロードして解凍する方法

リポジトリについてはこちら
今回は、上のyumを使ったインストール方法にしたいと思います!(単にyumが好きだから)

epelリポジトリって??

epelリポジトリとは、yumのインストールの際に使用するリポジトリで、CentOSの標準では用意されていないパッケージをインストールすることができるようにするためのリポジトリです(このなかにGoも入っています)。 言わば、拡張パック的な立ち位置だと思っています。一応、epelリポジトリはエンタープライズ向けに作られたリポジトリなので、信頼性は高めらしいです。
しかし、こちらのリポジトリでインストールできるパッケージは、基本的にバージョンが古いものが多い傾向にあります。なぜなら、エンタープライズ向けなのもあって、確実な信用がなければ組み込まないからです(たぶん)。
よって、バージョンの新しくなったものを「ほいさ!」とすぐに取り入れることはしないのだと思います。

インストール

epelリポジトリのインストール

まずはepelリポジトリをインストール

# yum install epel-release

これでGoをyumでインストールすることができる状態になりました。
ためしに、確認。

# yum info golang
読み込んだプラグイン:fastestmirror
Loading mirror speeds from cached hostfile
 * base: ftp-srv2.kddilabs.jp
 * epel: mirror.premi.st
 * extras: ftp-srv2.kddilabs.jp
 * updates: ftp-srv2.kddilabs.jp
利用可能なパッケージ
名前                : golang
アーキテクチャー    : x86_64
バージョン          : 1.11.4
リリース            : 1.el7
容量                : 631 k
リポジトリー        : epel/x86_64
要約                : The Go Programming Language
URL                 : http://golang.org/
ライセンス          : BSD and Public Domain
説明                : The Go Programming Language.

バージョン1.11.4がインストールできるみたいですね!
公式のtar圧縮ファイルでは、1.11.5が最新みたいなので、あまり差異はないみたいです。

Goをインストール

# yum install -y golang

完了しました!が出れば終了。
入ってるかの確認。

# go version
go version go1.11.4 linux/amd64

1.11.4が入ってる!

$GOPATHの設定

Goを動かすには、環境変数$GOPATHを設定しなくてはなりません。

Go言語では、環境変数GOPATHに保存されたパス(以降、単にGOPATHと呼びます)を開発時の作業ディレクトリとして扱います。 GOPATHを利用することで、外部ライブラリの導入やビルド作業を非常に簡単に行うことができます。

こちらより

よって、 $GOPATH = 作業ディレクトリにする必要があります。
今回は、usr/local/goをGoの作業ディレクトリにしようと思います。
環境変数は、~/.bash_profileで設定します。

# mkdir usr/local/go
# vi ~/.bash_profile
bash_profile.
...省略

GOPATH=/usr/local/go
PATH=$GOPATH/bin:$PATH:$HOME/bin

export PATH
export GOPATH

$GOPATHを/usr/local/goとして、$PATHは$GOPATH/bin:$PATH:$HOME/binとします。
~/.bash_profileへの変更を反映させて確認してみましょう。

# source ~/.bash_profile
# echo $GOPATH
/usr/local/go
# echo $PATH
/usr/local/go/bin:/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/root/bin:/root/bin:/root/bin:/root/bin

しっかり反映されていますね。
ちなみに$PATHの中身は、:で区切られていますが、左にあるpathほど優先順位が高く、一番最初に見に行くのが一番左のpathとなります。

bin, pkg, src ディレクトリの準備

bin:実行可能なbinaryファイルを保管しておく場所
pkg:パッケージを保管しておく場所
src:Goのソースコードをプロジェクト(パッケージ)ごとにディレクトリにして保管しておく場所

なので、この3つのディレクトリを$GOPATH配下に作リましょう。

# cd usr/local/go/
# mkdir bin pkg src

Goのソースコードは、src配下にプロジェクトごとにディレクトリで分けるので、今回はhelloプロジェクトを作りましょう。

# mkdir /usr/local/go/src/hello
# cd usr/local/go/src/hello
# touch hello.go
# vi hello.go

「Hello, world!」を表示させる簡単なプログラムhello.goを作成します。

hello.go
package main
import (
   "fmt"
)

func main(){
    fmt.Println("Hello, world!");
}

あとは、このhelloプロジェクトをbinary化してみます。

# go install /usr/local/go/src/hello

すると、$GOPATH/bin配下にプロジェクトの名前でバイナリファイルができています!

# ls /usr/local/go/bin/
hello

このhelloを実行してみましょう!

# hello
Hello, world!

ちなみに、これはどの場所でコマンド叩いても実行されます。
なぜなら、$PATHのなかに$GOPATH/binを設定したからです。
しかも、今回は$GOPATH/binを最優先にしているので、cdviといったLinuxの標準コマンドと同じ名前のバイナリファイルを作成した場合は、作成したバイナリファイルが優先されて実行されるので、命名には気をつけましょう!
それか欲張らず、$PATHの優先順位を下げるかですかね〜

今回は以上!お疲れ様でした〜!

nooboolean
3年目になってしまったエンジニア。 基本自分の備忘録用として残していますが、自分と同じことに迷った人に伝わりやすい記事を書くことが目標です。わかりにくい部分があればどしどしご指摘ください。
Why not register and get more from Qiita?
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away
Comments
No comments
Sign up for free and join this conversation.
If you already have a Qiita account
Why do not you register as a user and use Qiita more conveniently?
You need to log in to use this function. Qiita can be used more conveniently after logging in.
You seem to be reading articles frequently this month. Qiita can be used more conveniently after logging in.
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away
ユーザーは見つかりませんでした