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

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を使うのがよさそうです。