逆引きマニュアル: Go: 静的ファイルを埋め込む方法

投稿日:

やりたいこと

Goで静的ファイルを埋め込む方法です。

前提条件

Go 1.11.1で確認しています。

概要

statikを使います。 他にもいろいろあったみたいですが、現在活発にメンテナンスされているのはこれくらいのようです。

手順

埋め込み

以下のようにコマンドを実行します。 すると、 statik/statik.go というファイルが作られます。 このファイルを見ると、データが埋め込まれているようです。

  • -f: 強制的に上書き
statik -src ソースディレクトリ -f

利用

以下のようにします(抜粋なのでそのままでは動きません)

つまづいた点としては、 fileSystem.Open の引数は / から始まることです。 ファイルシステムなので、まあ当然かもしれませんが。

import (
    _ "./statik"
    "github.com/rakyll/statik/fs"
)

func foo() {
    // ファイルシステム読み込み
    fileSystem, err := fs.New()
    if err != nil {
        // エラー処理
    }

    // ファイルオープン
    f, err := fileSystem.Open("/index.json")
    if err != nil {
        // エラー処理
    }
    defer f.Close()
}

補足

マニュアル