So-net無料ブログ作成

Goで簡易Webサーバ2 [徒然]

C言語の簡易Webサーバは見たので、説明は実装の時にするとして、Goではどこまで標準ライブラリに機能が備わっているんだろうか、というところ。コンピュータ言語って、基本的な基礎的なところができていれば9割は書けちゃうよね。C++とか多重継承とかはそこまでたどり着くまでは重要じゃないし。重要じゃないことないけど、それが問題になるほどクラスに手を入れる段階ってそれなりに使い込んできてからの話なので、初心者向けならそういうものがあるんだよという説明だけにとどめておくぐらいでいいと思う。

何でもできちゃうってのは諸刃の剣で、特にコンピューターだと初心者がめちゃくちゃ危ない事を試行錯誤でやっちゃってる事も多い。ともあれ、いきなりWebに晒されるようなソフトを書くわけでもないので、それまでにいろいろ育てばいいのだろうけど、危機感を持てる人がどれだけいるか。とりあえず、仕事としてできればいいやというのがあるのだろうけど、そこいらはやっぱり人のスキルによって大きく幅があるしね。


ともあれGoのライブラリ周りをHTTPに使えそうなソケットとかを見ていく。できれば、それ系のGoのサンプルソースがあればググって見ていきたい。

 
公式だかわからないけど、ドキュメント的にはリンク先のようになっている。
 http://golang.jp/pkg

使えそうなのは
「net」と http://golang.jp/pkg/net
「websocket」あたりかな http://golang.jp/pkg/websocket
どちらでもいけそうな気がする。

あ~WebSocketってSocket.IOとかのみたいから、ちょっと違うかな。
それとnetをまんまimportするよりも、net/textprotoの方が楽かもしれないね。
ちょっとさわりを見てみましょうか。


ちょっとググってきたのだけれど、英語のドキュメントさえあまりない状態で、日本語のサンプルなんてほとんどない模様。

https://github.com/dustin/go-nntp/blob/master/server/server.go

サーバサイドじゃなくてクライアントサイドで便利っぽいとある
 https://groups.google.com/forum/#!msg/Golang-Nuts/2uQrRzHfXrY/aRoyPBqW5loJ
日本のページもあんまりないっぽいな。


なのでnetをそのまんま使った方がいいのかもしれません。とりあえず、netパッケージのソースはないのかなぁ。よくよく探してみるとnet/httpってのがあって、日本語のドキュメントには書かれていなかったりした。なので英語のサイトを見た方がいい。たぶん最新だろうし、英語だからメンテはされているのは当然の事だろう。

 http://golang.org/pkg/

うむ、お手軽にWebサーバは作れそうな様子。
 http://golang.org/pkg/net/http/
初めは動くのを確認したいので、どこかにサンプルを求めてみる。


動くか…
http://qiita.com/taizo/items/bf1ec35a65ad5f608d45

ハローワールドな一番簡単なソースをコンパイル。go buildでコンパイルできるんだったな。
http://server:8080みたいにブラウザで確認できました。hello, world出てきました。K&Rからだっけ?こんちわ世界。

telnetでもやろうとした。

$ telnet localhost 8080
Trying ::1...
Connected to localhost.
Escape character is '^]'.
GET
HTTP/1.1 400 Bad Request

Connection closed by foreign host.

あ、きちんと怒られたw。

$ telnet localhost 8080
Trying ::1...
Connected to localhost.
Escape character is '^]'.
GET / HTTP/1.1

HTTP/1.1 200 OK
Date: Fri, 10 Jul 2015 07:22:59 GMT
Content-Length: 12
Content-Type: text/plain; charset=utf-8

Hello, World

まぁ当然ですが、エラー処理もされてる。自分で実装すべきところなんてないんじゃ?
ということは、標準ライブラリのソースを読まないとダメだってことか。それかHTTP/2.0に移植とか?

次は動かしたソースを見ていきます。


タグ:Golang
コメント(0) 

コメント 0