at backyard

Color my life with the chaos of trouble.

Go言語で書き初め

f:id:shinshin86:20170101115058p:plain

きっかけはツイッターで呟いたとおり

ちなみにGolangは自分で書いたことはほぼほぼなく、
右も左も分からない状態なので、まずは下記のページを参考に勧めてみる。

http://golang.jp/install#introduction


なお、環境はMac環境。
Mac用のインストーラをダウンロードして、
インストールするというやり方でセットアップしていきます。

デフォルトでインストールすると、下記のパスにインストールされるようだ。

$which go
/usr/local/bin/go


とりあえずHello World.

package main

import "fmt"

func main(){
        fmt.Printf("Happy New Year!!")
}

ちなみにgoは"gofmt"とコマンドを打つことで、
goのコードを整形してくれるらしい。
コーディング規約戦争を生む前に、レール作っちゃうよ、という感じのよう。

下記のコマンドで、"gofmt"で整形したコードで上書き。

$gofmt -w hello.go

Writing Web Application

こちらのチュートリアル的なものを黙々と進めてみる。

Writing Web Applications - The Go Programming Language


上のページのまま進めると、簡単なwebアプリが出来る。

GOPATHのこと

Goを始めるにあたって"GOPATH"などの考え方が、
なんとなく躓きそうだなとか勝手に考えていたが、
ドキュメント類はわかりやすそうだったので、あとでしっかり読み込んでおく。

http://golang-jp.org/doc/code.html#Workspaces


動画付きなのはうれしいですね!

youtu.be


http://golang-jp.org/cmd/go/


ひとまず動画に習って

$mkdir gocode
$export GOPATH=$HOME/gocode

上のチュートリアルで作った簡単なwebアプリを読み込ませてみる。

$cd gocode
$mkdir -p src/github.com/{Githubアカウント名} # 私の場合は"shinshin86"
$cd src/github.com/{Githubアカウント名}

$cp -r {チュートリアルで作ったwebアプリパス(gowiki)} .

$cd gowiki
$go install

するとGOPATH直下にbinディレクトリが作られて、
下記のようになる。

# GOPATH直下にて
$tree
.
├── bin
│   └── gowiki
└── src
    └── github.com
        └── shinshin86
            └── gowiki
                ├── edit.html
                ├── test.txt
                ├── view.html
                └── wiki.go

これでコンパイルした実行ファイルを叩くとアプリが実行される

$~/gocode/bin/gowiki

でもbin側にパスを通すことで、
コンパイルしたプログラム名をコマンドから叩くだけで実行ができるようになるので、
より便利になる。

$export PATH=$HOME/gocode/bin:$PATH

下記で実行。

$gowiki

"go get"を試してみる。

実際にGithubに登録してみました。

github.com

試しに公開したコードを取り込んでみます。

さっき作ったgocodeディレクトリは一旦脇に避けて、
何もない"gocode"ディレクトリを作る。
(消してもいいんだけど、一応、ね)

$cd $GOPATH
$go get github.com/shinshin86/gowiki

$tree
.
├── bin
│   └── gowiki
└── src
    └── github.com
        └── shinshin86
            └── gowiki
                ├── README.md
                ├── edit.html
                ├── test.txt
                ├── view.html
                └── wiki.go

いいですね~!
私はまだまだペーペー野郎ですが、
すごく考えて作られている言語といった感想を持ちました。

あと、なんとなく触れにくいなと思っていたGOPATHも、
こうやって一つ一つ丁寧にドキュメント読みつつ、実行していくと、
とても便利なものであることを実感しました。

何事もそうだけど、
丁寧にドキュメント読んで、
動作を理解しつつ触れていくというのは、
何かを学習する上でとても大切なこと。
常に意識して行かなければならないと思いました。

というわけでGolang事始めでした。
書き初めっていうか、事始め、というか単なる備忘録になった。

そもそもチュートリアルなぞって、仕組みを理解するって感じで、
あまり書初めっぽくなっていないので、おせち食べたあと、
食後の運動がてらに何か書いてみようと思う。

というわけで、
2017年もよろしくお願いします!

追記 - FizzBuzz

結局書いたのは"FizzBuzz"でした。

package main

import "fmt"

func main() {
	i := 1
	fizz := "Fizz"
	buzz := "Buzz"
	for i <= 100 {
		if i%3 == 0 && i%5 == 0 {
			fmt.Printf("%d %s%s and HappyNewYear!\n", i, fizz, buzz)
		} else if i%3 == 0 {
			fmt.Println(i, fizz)
		} else if i%5 == 0 {
			fmt.Println(i, buzz)
		} else {
			fmt.Println(i)
		}
		i = i + 1
	}
}

でも、FizzBuzz一つ取っても、色んな書き方があって
そういうのを見比べるだけでも勉強になると思った次第。

今日はおせち食べて、友人と初詣行って、
友人が教えてくれたオススメの空耳アワー(at 初詣行く車内)で初笑いをさせてもらった一日でした。
あと、レイジ・アゲインスト・ザ・マシーンがめっちゃ流れていました。
すごく久しぶりに聴いたけど、彼ら、強烈でかっこいいよね!

youtu.be