Go言語用のメモリマップトファイルのライブラリを探してみた
ふとGo言語でメモリマップトファイルを扱えるライブラリってあるのかなと気になったので探してみました。
標準ライブラリ
Goのホームページでmmapで検索してみるとUnix系では実装があるみたいです。
Did you mean: Mmap と表示されているのでクリックしてみるとsyscallパッケージにMmapがあることがわかりました。
Munmapで検索してみるとこちらはMmapよりは実装されているOSが少ないです。syscallパッケージにMummapもあります。
Msyncで検索してみると5件ヒットしますが、未実装となっていました。
また、syscallパッケージにMmapとMunmapがあるといっても、Windowsでは実装されていません。
github.com/edsrzf/mmap-go
- ソース: edsrzf/mmap-go
- GoDoc: mmap - GoDoc
- ライセンス: 3項BSD
READMEによるとポータブルなAPIで、Linux (386, amd64), OS X, Windows (386)でテスト済みとのことです。
mprotect, mincoreなどはサポートしていないのでそういうUnix特有の機能を使いたい場合はGustavo Niemeyerさんのgommapがおすすめとのことです。
github.com/tysontate/gommap
Gustavo Niemeyerさんのgommapはプロジェクトがlaunchpat.netにホスティングされているので、github.comにミラーリングされていないかなと調べるとtysontate/gommapがありました。
READMEによるとOS X用のパッチも適用済みとのことです。 mmap_*.go
のファイル名から判断すると対応OSはLinux (386, amd64), OS Xのようです。
まとめ
edsrzf/mmap-goの機能で足りる場合はそちらを、Unix限定になってもいいからmprotectとかを使いたい場合はtysontate/gommapを使うのがよさそうです。