Hatena::Grouplinux2

Going My Linux Way このページをアンテナに追加 RSSフィード

2012年05月27日(日)

Ubuntu Linux に Google Go をインストールしてみる

| 14:54 | Ubuntu Linux に Google Go をインストールしてみる - Going My Linux Way を含むブックマーク はてなブックマーク - Ubuntu Linux に Google Go をインストールしてみる - Going My Linux Way Ubuntu Linux に Google Go をインストールしてみる - Going My Linux Way のブックマークコメント

Ubuntu LinuxGoogle Go をインストールしてみます。

インストール

公式ページに手順が書いてあるので、それに従います。

64bit-Linux 環境なので「go.go1.linux-amd64.tar.gz」をダウンロードしました。

$ sudo tar zxvf go.go1.linux-amd64.tar.gz -C /usr/local

以上、インストール終わり。

ユーザ環境に設定を行ないます。~/.bashrc などに以下を記述します。

export PATH=$PATH:/usr/local/go/bin

ちなみにホームなどにインストールした場合は以下のように設定します。

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

以上、(基本的な)設定終わり。(以降の作業があるので source ~/.bashrc しておきます)

チュートリアル

公式ページに参考ページがあります。

A Tour of Go は Go を Web サイト上で実行できるページがあります。

----

英語のページなので Google Chrome で翻訳しながら読んでいたら、「The Go Programming Language」が「囲碁プログラミング言語」に訳されました。

「A Tour og Go」は「囲碁のツアー」。。。。

Hello,World

Hello,World。こいつはやっとかないといけません。

難読な翻訳文を読みつつ進めます。

ワークスペースを作ります。そのパスは環境変数 GOPATH に設定します。

私は以下のようにやりました。

$ mkdir -p ~/sandbox/go
$ export GOPATH=~/sandbox/go   # 後で、~/.bashrc にも記述しました

ワークスペース直下の bin にパスを通します。

$ export PATH=$PATH:$GOPATH/bin  # 後で、~/.bashrc にも記述しました

ワークスペース直下に src を作成します。src はソースの置き場所です。

$ mkdir $GOPATH/src

作成するパッケージを置くベースのインポートパスを作成します。

ここでは example とします。*1

$ mkdir $GOPATH/src/example

hello パッケージ(のパス)を作ります。

$ mkdir $GOPATH/src/example/hello

ソースファイル hello.go を書きます。

$ vi $GOPATH/src/example/hello/hello.go

hello.go の内容(公式サイトの「A Tour of Go」に書かれているもの)

package main

import "fmt"

func main() {
    fmt.Println("Hello, 世界")
}

example/hello パッケージをビルドしてインストールします。

$ go install example/hello

$GOPAHT/bin に hello が作成されました。

$ ls $GOPATH/bin/
hello

実行してみます。

$ $GOPATH/bin/hello
Hello, 世界

実行できました。

現状では以下のような構成になってます。

$ tree $GOPATH/
/home/lnznt/sandbox/go
|--- bin
|     |--- hello
|
|--- src
      |--- example
            |--- hello
                  |--- hello.go

パッケージを作ってみる

mylib パッケージを作ってみます。

パッケージが提供するのは足し算を行なう関数 Add です。

$ mkdir $GOPATH/src/example/mylib
$ vi $GOPATH/src/example/mylib/add.go

add.go の内容

package mylib  // パッケージ名を記述する

func Add(a int, b int) int {
    return a + b
}

ビルド&インストールします。

$ go install example/mylib

パッケージができました。

$ tree $GOPATH
/home/lnznt/sandbox/go
|--- bin
|    |--- hello
|
|--- pkg
|     |--- linux_amd64
|           |--- example
|                 |--- mylib.a   # 作成されたパッケージ
|--- src
      |--- example
            |--- hello
            |     |--- hello.go
            |    
            |--- mylib
                  |--- add.go

パッケージを使ってみる

先程の hello.go で作成したパッケージの関数を使ってみます。

example/hello/hello.go を以下のように変更します。

package main

import (
    "example/mylib"  // example/mylib をインポートする
    "fmt"
)

func main() {
    fmt.Println("Hello, 世界")
    fmt.Printf("1 + 2 = %v\n", mylib.Add(1,2)) // mylib.Add() を使う
}

ビルド&インストールします。

$ go install example/hello

(更新された)hello を実行してみます。

$ $GOPATH/bin/hello
Hello, 世界
1 + 2 = 3

変更されてます。

----

mylib.Add() を最初 mylib.add() と書きました。

すると、hello のビルド時に以下のようなエラーが出ました。

$ go install example/hello
# example/hello
hello/hello.go:10: cannot refer to unexported name mylib.add

多分ですが、名前が大文字で始まらない関数エクスポートされないようです。

参考URI

参考書籍

はじめての「Go言語」 (I・O BOOKS)

はじめての「Go言語」 (I・O BOOKS)

*1チュートリアルでは、バージョン管理のリポジトリの場所を使うのが良い、と書かれてます。