急いで学ぶGo lang#1 概要とセットアップ

go lang

この記事は公開されてから1年以上経過しています。情報が古い可能性がありますので、ご注意ください。

Go言語を始める

諸事情によりGoを使ってみることになりました。
弊社では一部の人たちに人気かもしれないGo。
私は名前を知ってる程度の知識だったのですが、いい機会なので学んだ内容をまとめていきます。

動作環境

今回使用した動作環境は以下のとおりです。

  • OS : MacOS X 10.9.4
  • GO : 1.4.1

Goとは

GoはGoogleによって開発されているオープンソースのプログラミング言語で、
現状Linux/Mac/Windows/Androidで動作します。
また、最近はGoogle App EngineでもGoを使って実装できるようになったみたいです。
主な特徴は以下のとおり。

  • シンプルな言語である
  • コンパイル・実行速度が早い
  • 同期処理が容易に行える
  • ポインタはあるけどポインタ演算はできない
  • 過去にあるいろいろな言語の特徴を持つ
  • 型継承・ジェネリクス・オーバーロードといった機能がない
  • インターフェイスによる多態性を実現
  • Cのライブラリから関数よんだりできる

ちなみに、近々AWS SDK for Goがリリースされる予定らしいです。

Goのセットアップ

インストール

まずはGoのセットアップをします。今回はMacでのお話です。
まずはここから環境にあったpkgをダウンロードしてインストールするか、
Homebrewでインストールできます。自分は楽なのでbrew使いました。

% brew install go
% go version                                                                                   
go version go1.4.1 darwin/amd64

環境変数の設定

Goには設定すべき環境変数が2つあるみたいです。
ただ、こことか見るといらないとか書いてます。
どうやら必須ではないけど、設定しておいたほうが何かと良いらしいです。

設定推奨の環境変数の1つが「GOROOT」。これはGoのツールがあるディレクトリへの参照だそうです。
ようするにJAVA_HOMEみたいなものですかね。
HombebrewでGoをインストールした場合、
/usr/local/opt/go/libexec/
になるようです。(実体は/usr/local/Cellar/go/<バージョン>/libexec/)
goディレクトリ自体じゃないので注意。

設定推奨の環境変数その2は「GOPATH」。
これはワークスペースのパスを設定するめたの変数で、Goプロジェクト自体を指定しておけばいいらしいです。
GOPATHはプログラム中のimport文の解決に使われるみたいです。
Goではgo getというコマンドで外部パッケージを読み込むことができるんですが、これを実行すると
GOPATHの先頭のディレクトリにダウンロードされます。
なお、GOPATH以下は下記のように決められた構造を持っている必要があります。
GOPATHの下にはsrc(ソース)/bin(バイナリ)/pkg(外部パッケージ)ディレクトリがあること。

$GOPATH=/path/rour/gopath

/path/rour/gopath
|
|ーsrc
|ーbin
|ーpkg

あとはbash_rcなりzsh_rcなりにexport文をいれておきましょう。

export GOROOT=/usr/local/opt/go/libexec
export GOPATH=$HOME/<your go project workspace>

サンプルを動かしましょう

適当な場所に(とりあえず$GOPATH以下にでも)main.goファイルを作成し、
下記内容を記述します。なんとなく何してるかはわかりますね。

package main

import "fmt"

func main() {
    fmt.Println("hello world")
}

main.goができたら、プログラムを実行します。実行はgo runコマンド。

% go run main.go                                                                               
hello world

とりあえずGoが動く環境はできました。

参考サイトなど

  • Masahide Yamasaki

    GOROOTはカスタムパスにインストールした時のみ設定する変数のようです
    https://golang.org/doc/install#install
    >Note: GOROOT must be set only when installing to a custom location.