
みなさんこんにちは、SDです。
Go言語は記述の明確さとパフォーマンスの高さでモダンなWeb系企業に採用され、
ここ最近ずっと流行っている、Webで今一番アツい言語でしょう。
「自分、Go書けるんだぜ」
というだけで上流階級な気分になれるような気がしてきませんか?
私もその仲間にいれてもらうべくGo言語の入門記事としてTwitterの様なCRUDアプリケーションを作っていこうかと思います。
今回はGoでのWebサーバーの立ち上げまでを扱います。
環境構築
今回は環境構築の手間を省くためにAWS Cloud9を開発環境として採用します。

AWS Cloud9 は、ブラウザのみでコードを記述、実行、デバッグできるクラウドベースの統合開発環境 (IDE) です。これには、コードエディタ、デバッガー、ターミナルが含まれています。Cloud9 には、JavaScript、Python、PHP などの一般的なプログラム言語に不可欠なツールがあらかじめパッケージ化されているため、新しいプロジェクトを開始するためにファイルをインストールしたり、開発マシンを設定したりする必要はありません。
AWS Cloud9の利用方法説明は省略しますが
サーバー作成時の設定は全てデフォルトでOKです。
サーバーを立ち上げたらさっそくIDEを開きましょう。

IDEを開くとこの様な画面になっているかと思います。
好みですが、自分は入力画面が大きい方がいいので、
ドラッグして引き上げます。

こんな感じでいかがでしょう。
GOPATHの確認
次にGoの開発ディレクトリである「GOPATH」を確認してみようと思います。
$ go env
そうするとGoの各種設定を見ることができますが、その中に以下の様な記述があると思います。
GOPATH=”/home/ec2-user/go”
これがCloud9のデフォルトGOPATHです。
このようにCloud9では初期状態でGOPATHが設定されているため、
今回は設定変更の必要はありません。
コードを書く(静的Webサーバーの実装)
Goのプロジェクトではsrcディレクトリの中にソースコードを配置していく慣習がある様です。
ということで、/environment/go/src など任意のディレクトリの 中に、main.goを新規作成し、コードを書いていきます。
今回は手始めとして静的なhtmlを返すWebサーバーを作ります。
Goのプログラムは以上です。
func mainで関数が5つ使われていますので、これらを軽く解説していきます。
http.Handle() アクセスされたURLと、実行させたい関数を関連付けます。 (ハンドラーの登録) この場合は”/”にアクセスされたとき、http.FileServer()が実行されます。
http.FileServer() 引数に渡したものをレスポンスとして返します。
http.Dir() 指定したディレクトリを読み込みます。
log.Fatal() 引数実行中の致命的なエラーをターミナルに出力します。
http.ListenAndServe() Webサーバーを起動しリクエストを待ち受けます。 2つめの引数を nil を渡すとハンドラーが使われるようになります。
今回使っているnet/httpだけではなく、 Goのパッケージはシンプルで強力な機能を備えており、 今回の様な簡単なものなら上記の二行でWebサーバーの機能を実装することができます。
あとは、静的ファイル「index.html」を/environment/go/src/staticに作っておきます。
なんでもいいですが、よくある例を以下に書いておきます。
実行・確認
まず作成したmain.goを実行します。
$ go run main.go
これでサーバーが起動しました。
次はCloud9上で動作確認しましょう。

画面上部の「Preview」を開き、赤く囲った「Preview Running Application」をクリックしてください。

画面右にアプリケーションの実行結果が表示されましたね。
これで基本的なWebサーバーは作れてしまいました。
以降は、これにDB連携などCRUDを実装していく形になっていきます。
まとめ
いかがだったでしょうか。
驚くほど簡単にWebサーバーを構築出来たのではと思います。
次はテンプレートとDBの連携について扱っていきます、お楽しみに~



