2011/05/11

Recent entries from same category

  1. Go言語で Lisp 処理系を作った。
  2. Go 言語のスライス挿入ベンチマーク
  3. Go 言語で変数のシャドウイングを避けたいなら shadow を使おう。
  4. Go 言語の struct の実体を引数で(なるべく)渡せない様にするテクニック
  5. Oracle Cloud Function でしりとりした。

僕にとってデカいニュースが飛び込んできた。
Goの開発プロジェクトに関わってて良かった。今日はそう思える日になりそうだ。
まだGoogle App Engine Blogにもエントリされてないが、Google App EngineにGo言語が仲間入りした。
Downloads - Google App Engine - Google Code

Google App Engine SDK for Go

http://code.google.com/intl/en/appengine/downloads.html#Google_App_Engine_SDK_for_Go
Go言語は元々Google社員が開発している言語で、コンパイル型言語とは言えDuckTypingを前面に押し出した、スクリプト言語に近い仕様になっています。またWebに関するAPIは豊富で短いコードで簡単にWebアプリケーションを書く事が出来る様になっています。
例えば、先日書いたコマンドライン向けTwitter Clientであれば、OAuthライブラリこそ他に頼っているがメインのコードは350行だ。

さて今回公開されたGoogle App Engine for Goだが仕組みはGoが元々持っているWebサーバ機能を使っている。ソースはコンパイルせずに配置しapp.yamlファイルは以下の様に書く。
application: helloworld
vesion: 1
runtime: go
api_version: 1

handlers:
url: .*
  script: _go_app
この _go_app は固定。実行すると内部でコンパイルされ、applicationで指定したパッケージのinit関数が呼び出される。アプリケーションはあくまでパッケージとして提供し、main関数は書かない。なのでinitでハンドラを登録する。
極端に簡単なアプリケーションを書くとすると、以下の様になる。
package helloworld

import "http"

func init() {
    http.HandleFunc("/"func(w http.ResponseWriter, r *http.Request) {
        w.Header().Set("Content-Type""text/plain")
        w.Write([]byte("Hello, World"))
    })
}
まぁ簡単。もちろんGoogle App Engine上で動く言語 Python や Java と同様に appspot.com でホストする場合はローカルディスクにはアクセス出来ない。ただし既に
  • blobstore
  • datastore
  • mail
  • memcache
  • taskque
  • urlfetch
  • user
という他の言語と同じだけのAPIは既に用意されている。Goにはポインタやアドレスという概念がある為にメモリに直接アクセスする様な事も出来るが、Goはその全てをランタイムを介して行っているのでそれらを例外として扱う事が出来る。
なお、appengine向けのGoランタイム上で動作する為、appspot.com でホストする場合にはコンパイル済みのモジュールを配置する事が出来ない。こちらは python で pyd が置けないのと同じですね。

まさかPerlよりも先にGoogle App Engine向け言語として採用されるとは思ってませんでした。ようやく日の目を浴びる事になりますね。

Go言語はじまったな

Posted at by | Edit


blog comments powered by Disqus