Go言語の実装(Channel)をちょっと眺める

最近、Docker等でGo言語がはやっているので、コードをちょっと眺めてみる。
とはいっても、Concurrency機能であるGo channelの辺りしか見ていない。
わかったのは

  • 基本的にはメッセージを送受信する仕組み。
  • Buffered/Unbufferedの2種類がある。(同期非同期というべきかも)
  • ほかにも、同期機能が提供されているが、基本的にはGo Channel利用が推奨
  • ソースコードはpkg/runtime以下にchan.goc/chan.hファイルがそれ
    • (昔は、chan.cだったが、chan.gocに2014年2月に書き直された)

なお、.gocは、goからC言語の関数を呼び出す仕組み。goc2c.cでソースコードを処理する。

余談だが、GCは、Mark&Sweep方式である。なお、メモリアロケータはGoogleらしくtcmallocを使っている。

最近の言語らしく、Webページ(http://golang.org/doc/)の基本的な構成までソースコードツリーに入っている。このため、自分のローカルサイトでも、ブラウザ経由でソースコードを編集する環境が構築できたりしてしまう。

参考資料