embed.FSの更新時刻を変更したfs.FSを提供するライブラリーです。
embed.FSは、更新時刻がtime.Timeのゼロ値に固定されていますが、
この時刻を別の時間に替えることができます。
embed.FSは、更新時刻(FileInfoのModTime())として、常にtime.Time
型のゼロ値を返します。
そして、ゼロ値を特別扱いするプログラムで、この仕様が問題になります。
例えば、httpモジュールのhttp.FileServer()
やhttp.ServeContent()
は、更新時刻がゼロ値の時、
Last-Modified
ヘッダの出力を止めます。
ということは、embed.FSをそのまま利用するとLast-Modified
ヘッダ無くなるので、HTTPキャッシュ制御に影響が出てしまいます。
使い方は単純で、BuildInFS()
というラッパー関数呼び出すだけです。
ラッパー関数のBuildInFS()
の定義は以下の通りです。
func BuildInFS(fsys embed.FS, build_time time.Time) fs.FS
引数にembed.FSと更新時刻を渡すと、更新時刻が替えられたfs.FSが生成されます。
以下のようなコードで、embed.FSの更新時刻を変えることが出来ます。
//go:embed testfs
var raw_testFS embed.FS
var BuildTime = time.UnixMicro(1702377180976629)
var testFS = buildfs.BuildInFS(raw_testFS, BuildTime)
上記のサンプルコードではBuildTime
変数として更新時刻を決め打ちにしていますが、
実際の利用時には、Goのgenerateの機能などで適切な時刻を生成してください。