Go言語で書き初め
きっかけはツイッターで呟いたとおり
あけましておめでとうございます。去年は書初めの代わりにHaskellでFizz Buzz書いていたらしいので、今年はGo言語でWebサーバ書いています。というわけでインストール終えて、チュートリアルやっているところ、いま。 https://t.co/glqQLy7Y7b
— Yuki Shindo (@shinshin86) January 1, 2017
ちなみに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
動画付きなのはうれしいですね!
ひとまず動画に習って
$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に登録してみました。
試しに公開したコードを取り込んでみます。
さっき作った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 初詣行く車内)で初笑いをさせてもらった一日でした。
あと、レイジ・アゲインスト・ザ・マシーンがめっちゃ流れていました。
すごく久しぶりに聴いたけど、彼ら、強烈でかっこいいよね!