golang::発展途上
ちょっと気になってたsliceとかをコピーするbuilt-in関数copy.
流量が多そうだからGo Nuts mailing listに入ってなかったから知らなかったのもあるんだけど、release.2009-12-09で入った模様。WebSocketで必要になるまでは全然defaultを追いかけてなかったから気にもしてなかった。
2009-12-22と2010-01-05にreleaseタグが更新されてて現在の最新releaseは2010-01-05。
変更点とかはrelease.2010-01-05だと、http://go.googlecode.com/hg/doc/devel/release.htmlに書かれている。っていうか1/5までここじゃなくて/にあった様な。
と、日々進化しています。(が、上げたissueは放置プレイw)
ま、ちょびっとづづ期待という事で。
android/chrome osにしてもgoogleブランドとしての統一感が希薄だから、googleのサービスを使って(
組み合わせて)google以上のサービスを作れる可能性は有るなぁと思いつつ。
golang: 小ネタ集
・templateパッケージのデフォルトデリミタは"{","}"でJavascriptと相性が悪い
→さっさとSetDelims("{{", "}}");とかして変えた方がいい
(JavaScript外出しにしなさいって話もあるけど、それはそれでFileServerのハンドラが必要)
・htmlEscapeはtemplate.HTMLEscapeで
・Formの値は、req.FormValueで簡単に取得できる
goじゃなくてchromeだけど、
・ChromeのWebSocketはProxy環境下だと GET じゃなく、CONNECTで接続。
→ポート443(つまりhttpsのポート)使えばほとんどの環境で接続可能(なはず)
golang: ARM用バイナリのクロスコンパイルに挑戦
cgoは試してない(クロスコンパイラの設定が面倒w)けど、ごく普通に動きましたよ。環境変数を、
export GOARCH=arm
にしてgoをコンパイル。5a 5c 5g 5lができたのを確認して、
$ 5g hello.go
$ 5l -o hello hello.5
$ file hello
hello: ELF 32-bit LSB executable, ARM, version 1 (SYSV), statically linked, stripped
をを。
BeagleBoardに持っていて実行。
# ./hello
hello, world
# cat /proc/version
Linux version 2.6.29-omap1-00007-gdebf08f-dirty (ku....@kumama) (gcc version 4.4.1 (0xlab) ) #8 Wed Dec 23 04:06:34 PST 2009
をを。
当たり前と言えば当たり前だけどなんか凄いw
WebSocket:golang chat
メーリークリスマス!
と、言う事で(笑)WebSocketのchatを色々と実装。
って言っても切り貼りでベースは、WebSocketでChatを作ってみた。
http://kumama.org/chat/メッセージをDBに書いてたりWSサポートしてないブラウザでも一応掲示板として動いたりといった実装を追加。
で実際に動かしています。
# 止めました
HTML5の規格ではあるもののWebSocketは、
現状Chrome β(release 4.0.249.0から)でしかサポートされていないので、
βを入れるかChromiumのdaily buildを突っ込まないとWebSocketのお試しには成りません。
ブラウザを2つ立ち上げて片方で書き込んだメッセージがもう片方に届くさまを見てください。
メッセンジャーとかも作れそうな感じ有ってFlashとかAdobe Air使うよりは全然まともな気がします。
コードは以下に。
template使ったりsqlite使ったり色々やってみるとgo言語の理解が進む感じ。
書いていて「をを!」って思った事は小ネタ集として明日にでもまた書きます。
あー、sqliteは微妙に下記の方がいい感じだったので前に紹介したのは使ってなかったりw
http://github.com/phf/go-sqlite3
http://github.com/phf/go-db
cgo経由でのCライブラリの呼び出しは色々疑問も有るものの、現状DBが無いので仕方なし。っていうか、presistent storegeが欲しいって事かなぁ。
嗚呼、golangもreleaseブランチじゃなくてdefaultブランチじゃないとだめですよ。
golangでスライスには代入出来ない…
多分、参照だからって理由だと思うけど、
スライスの要素には代入できるけど、スライスのコピーができないのは…。
確かに要素数違い場合とか元配列の方の残り要素で移動が必要になるけど、
要素数が同じ場合ぐらいは代入させて欲しい。
多分、いろんなところで copySlice って関数が出来てる気がする。
# defaultブランチ追いかけてる人の間では WebSocket っていうのが話題に
Add WebSocket server framework hooked into http.
WebSocketでChatを作ってみた
今はclient側のコードでProxy対応は入ってないけど…。
httpだけじゃなく https で CONNECT して、Proxyのタイムアウトごまかすために noop して…とかそのうち進化していくんだろうなぁ。