1. HOME
  2. Blog
  3. Golang
  4. 初めてのGo言語

初めてのGo言語

並列処理が簡単に実装できることがGo言語の大きなメリットの一つです。クローラや負荷試験などGolangでリプレースしてみたいので、普段使い慣れた言語がある人のために、並列処理でhttpリクエストを行うコードの作成を目標に、まずは言語を触っていきたいと思います。

初期設定など

Go環境の設定と、Sublimeユーザーとしては欠かせないビルドの設定など行いました。
:=みたいな記法があることと、モダンな省略が効いていながら、速度を出すためにCっぽいことなどうっすらと知っています。
一応wikipediaへのリンクを貼っておきます。
https://ja.wikipedia.org/wiki/Go_(プログラミング言語)

"Hello World" です。このGo Playgroundをシェアするのでいじって見てください。
importmainも自然で書きやすいです。

なんなくクリア。と思いきやPrintfをprintfと書いていることに気づかず若干ハマりました。
早速Goの記法を少し学びました。 Effective Goに詳しく書かれていますが、冒頭にこうあります。

"Names are as important in Go as in any other language. They even have semantic effect: the visibility of a name outside a package is determined by whether its first character is upper case. It's therefore worth spending a little time talking about naming conventions in Go programs."

他の言語と同様にGoでもネーミングは重要で、最初の文字が大文字ならパッケージに内包された名前を示すという決まりもあります。名前について話し合う時間を大事にしましょう

http requestを実行してみたい

ウェブアプリとして実践的なコードから書き始めると言語の学習は捗ります。ということで、Goのhttpパッケージのexampleを見てみると、レスポンスの取得後にdefer resp.Body.Close()という行を見つけました。
レスポンスの終了を明示的に実行しないといけないのは想像に難くないのですが、deferという聞き慣れないGo特有っぽい記述があります。こういう時には気になる部分をしっかり押さえておきます。

次のように記述すると1. Start, 2. End, 3. True Endの順番に出力されます。deferされた行は関数の終了後に実行されることがわかります。この便利さは使うほどに感じていくことでしょう。
ではdeferを関数内でたくさん使った場合にはどうなるのかを試してみたいと思います。
Go Playground
後に書いたdeferから実行されていくことがわかりました。
GoではException的なものはPanicと書いてraiseするようですが、その際にでもdeferされた行は実行さるとのことなので、それも試して見ましょう。
Go Playground

エラーで関数の処理が脱出した後にもそれ以前のdefer行は実行されましたが、panicした行以降に書かれたdefer行は実行されませんでした。導入ということでこの辺にします。
次回も言語になれるために、print文をいじってみます。