Go言語のチュートリアルをこなしてみた
ひょんなことからベトナムのホテルの予約サイトをつくることになったので
色々と勉強しているわけですが、せっかくならと最近流行りの

Nginx + Go言語 + Revel(Go言語用のwebフレームワーク)

を使ってみて作ってみようと思ってるわけです。

なので、まずは Go言語のチュートリアルとして A Tour of Go に取り組んでみました。
かかった時間は概ね12時間ぐらいかな?

結論から言うと、
 ・全然チュートリアルじゃないw
 ・演習問題の自分の解答の出来はかなりイマイチだった。


とりあえず演習問題をこなしてみた後、自分の解答と模範解答を見比べてみて
「ああ、ここはこうすりゃよかったのか!」みたいな
コツが判ったのは大きな収穫でした。

【全然チュートリアルじゃないぞw】

基本、他言語が身に付いている人向けのチュートリアルと思って差し支えないですw
ちろっとスクリプトが組めまーすぐらいのレベルの人だと、
おそらく本当に最初で躓くか、Pointer の章から先に進めなくなると思います。

最後まで貫徹しようとおもったら、下記の概念は理解しておかないとダメでしょう。
・構造体
・オブジェクト指向
・再帰(これが説明なくさらっと出てくるところがw)
・マルチタスクプログラミング(危険性やコツに対する話は自分で考えろ的なw)

【Go言語を理解するにあたって】

Go言語に対する最初の印象としては、下記の仕様に代表される通り
合理化版C」とゆーものでした。おそらくほかにもあるかと。

・switch ~ case から抜けるのに break 文が不要
・while, do ~ while が構文として存在しない
・extern 相当が無く、外に見せたい要素は名前の先頭が英大文字

純粋な C言語の知識に加えて、モダンなデータ構造に関する知識があれば
Methods の章まではボチボチ進めると思いますが、問題はそっから先です。まず、

・クラスが無い

ってのはかなり戸惑いました。代わりに

・構造体の外側に、構造体と紐付いたメソッドが定義できる。

とゆーのがあり、さらに純粋仮想クラスみたいな仕組みがあります。(Interface)
クラスが無いのに純粋仮想クラスみたいなのって訳わからんのですが
とにかくそういう理解をしました。

そして、言語側で用意している機能を呼び出す際に、
この純粋仮想クラスみたいな仕組みの使用を強制されることが多いです。
まあ、ここは慣れるしかなさそうです...

クラスが無いので、そのままC++風味でプログラミングして行くと
メンバ変数になるような変数が、全部大域変数になるので大変なことになりますw
幸い、Go言語には「関数の中に関数を定義できる」とゆーヘンテコな機能があるので
この機能を使って大域変数の数を抑えるのがポイントのようです。

【やっぱりマルチタスク】

Go言語のもう一つの特徴は、やっぱり「並列処理」でしょう。たしかに

・タスク起こすのが超簡単w
・タスク間の通信処理が排他とかあんま意識しないで書ける

と、C++ でもできるけれど、ちょっと面倒って話が簡単になってます。特に、

・タスクが終わった時に defer で処理終了を投げる
・処理終了を select で待ち受ける

ってパターンは並列処理では多用される構文のようです。

ちなみに、タスク間の通信処理は channel を使って行うわけですが
変な使い方をすると速攻プロセスが落ちるって仕組みはとても気に入りました!

ただ、一般的なえぶあぷりで、
どれだけ並列処理を使った処理に効果があるかは懐疑的です。
チュートリアルの web クローラなら絶対並列処理にすると思いますが。

とりあえず、一通り理解を進めたところで Revel にチャレンジしたいと思います。


【2017/04/25】 golang / Revel | トラックバック(0) | コメント(0) | page top↑
<<我が家の家計 2017/4 | ホーム | rpmforge は、しにました>>
コメント
コメントの投稿











管理者にだけ表示を許可する

トラックバック
トラックバックURL
http://hidenov.blog4.fc2.com/tb.php/1358-d86c2013
| ホーム |