Go言語入門 Twitter風のWebアプリを作ろう(Webサーバーの実装編)

samuneGO

みなさんこんにちは、SDです。

Go言語は記述の明確さとパフォーマンスの高さでモダンなWeb系企業に採用され、

ここ最近ずっと流行っている、Webで今一番アツい言語でしょう。

「自分、Go書けるんだぜ」

というだけで上流階級な気分になれるような気がしてきませんか?

私もその仲間にいれてもらうべくGo言語の入門記事としてTwitterの様なCRUDアプリケーションを作っていこうかと思います。

今回はGoでのWebサーバーの立ち上げまでを扱います。

 

環境構築

今回は環境構築の手間を省くためにAWS Cloud9を開発環境として採用します。

Cloud9_now_runs_on_and_integrates_with_AWS

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

AWS Cloud9の利用方法説明は省略しますが

サーバー作成時の設定は全てデフォルトでOKです。

サーバーを立ち上げたらさっそくIDEを開きましょう。

firstCloud

IDEを開くとこの様な画面になっているかと思います。

好みですが、自分は入力画面が大きい方がいいので、

ドラッグして引き上げます。

hikiage

こんな感じでいかがでしょう。

 

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」を開き、赤く囲った「Preview Running Application」をクリックしてください。

resultgo

画面右にアプリケーションの実行結果が表示されましたね。

これで基本的なWebサーバーは作れてしまいました。

以降は、これにDB連携などCRUDを実装していく形になっていきます。

まとめ

いかがだったでしょうか。

驚くほど簡単にWebサーバーを構築出来たのではと思います。

次はテンプレートとDBの連携について扱っていきます、お楽しみに~

Share on Facebook0Tweet about this on TwitterShare on Google+0Email this to someone