7月 112016
 

さて、前回に引き続きGolangです。
前回は大まかなPHPとの比較をやったので今回は最初の導入周りをやっていこうと思います。

なお前回のリンクはこちらです。

環境

  • Windows
  • Go 1.6以上

Goのインストール

インストール自体は割愛。そこまでつまずくこともないので。。。

Downloads – The Go Programming Language

ここから導入してください。Homebrewの人はhomebrewでいいし、linuxの人はGVM(Go Version Manager)でも良いです。

入っているか確認しておきましょう。

$ go version
go version go1.6.2 windows/amd64

GOPATHの設定

環境変数としてGOPATHというものを指定する必要があります。
GOPATHは実際に作業を行うディレクトリなので、アクセスしやすい場所を指定する必要があります。
私の場合は毎回ホームディレクトリにgo_workという名前でディレクトリを作成してそれを指定しています。今回もそれで。

先にgo_workを作っておきましょう。

mkdir go_work

Windowsの場合

コントロールパネル(Windows10の場合はスタートボタンを右クリックすれば楽に行ける)からシステムとセキュリティ→システム→システムの詳細設定→環境変数。

ユーザー環境変数に変数がGOPATHで値がC:\Users\ユーザー名\go_workで登録します。
実際はsetx GOPATH "C:\Users\ユーザー名\go_work"でも登録できるんですが不安要素を無くすためにも直接編集で。

Macの場合

.bashrcしか私はわからないですがexport GOPATH=/home/ユーザー名/go_workを追記したらいいと思います。

binディレクトリにPATHを通しておこう

普通はGOPATHだけで良いのですが、GOPATHの下にbinディレクトリが用意さ れてそこにバイナリファイルが格納される関係でパスを通しておくことをおすす めします。

HelloWorldをやってみる

ではHelloWorldをやってみましょうー。

GOPATHの下にsrcディレクトリを作って、その下にhello-worldディレクトリを作ってください。

GOPATH->src->hello-world

ですね。
hello-worldディレクトリの中に、hello-world.goを作りましょう。この名前はなんでも良かった気がするけど名前はこれで。

$ vim hello-world.go
package main

import "fmt"

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

このファイルを作ったら、go run hello-world.goで動かしてみましょう。

$ go run hello-world.go
hello world

ほかにもビルドしてから実行する方法も。

$ go build hello-world.go
$ ./hello-world.exe ←windowsの場合
$ ./hello-world ←他の場合

解説

一応、先ほどのコードを軽く解説。

package main

goのコードでは1行目のパッケージ名を入れる必要があります。
mainパッケージは特殊で、いわゆる最初に読まれるファイルです。
mainパッケージ以外は、フォルダ名がpackage名となります。今回の場合だと、hello-worldがこのフォルダの中でのパッケージ名となります。

import "fmt"

次のimport文は対象のパッケージをロードする構文です。
この場合だと、goの標準に備わっているfmtパッケージをインポートして使用できるようにしています。
これを指定しておくことでmain関数の部分でfmt.Printlnが使用できるようになります。

また、このimportは以下の様な表現方法が存在します。

// 以下のように複数指定が出来るような形も書ける
import (
    "fmt"
    "log"
)

// パッケージ名はその階層ごとに切られ、
// 最後のフォルダ名がパッケージ名なので被ることが有ります。
// そんな時には以下のように別名が付けれます。
import (
   "fmt"
    f "aaa/bbb/fmt" // aaa/bbb/fmtパッケージとfmtパッケージが被ってしまうので別名で指定する 
)

main関数はもう想像通りだと思いますが、、、実行時にはじめの方に読まれる関数です。(はじめの方にと言ったのは、init関数という関数が存在すればそれが先に読まれるから)

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

fmt.Println("hello world")は出力する関数です。Pが大文字なのが疑問に思うかもしれません。Goの場合は外部のパッケージの関数等にアクセス出来るのはパッケージ内で大文字から始まるものだけなんです。

例えば以下の様なパッケージを指定しておいたとしましょう。

package sample

import (
    "fmt"
)

func Hoge() {
    fmt.Println("Hoge")
}
func huga() {
    fmt.Println("huga")
}

だと、外部からはHoge関数にしかアクセス出来ません。また、インポートしていないとHogeすらアクセスできません。

package main

import (
    "sample"
)

func main() {
    sample.Hoge()
    sample.huga() // エラー
}

補足:先ほどから文字列をダブルクォートで囲ってるのですが、シングルクォーテーションは文字列としては扱うことは出来ません。(Runeというものとして扱われますが今は知らなくていいです)

最後に

今回はGolangの導入周りからHelloWorldまででしたー。
次は基本構文編ですかね・・・。

Pocket

 Posted by at 5:00 PM

 Leave a Reply

You may use these HTML tags and attributes: <a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code> <del datetime=""> <em> <i> <q cite=""> <s> <strike> <strong>


*