PHpullh

GO · 파일/IO

embed 심화

//go:embed로 파일을 바이너리에 포함합니다. 정적 자산, 마이그레이션 SQL, 템플릿 등에 활용합니다.

파일/IO중급embedstaticfsbinary

핵심 설명

//go:embed로 파일을 바이너리에 포함합니다. 정적 자산, 마이그레이션 SQL, 템플릿 등에 활용합니다.

Go code

package main

import (
	"embed"
	"fmt"
	"io/fs"
)

// 단일 파일 임베딩
//go:embed go.mod
var modFile string

// 여러 파일 임베딩
//go:embed data/*.sql
var sqlFiles embed.FS

// 전체 디렉토리
//go:embed static
var staticFS embed.FS

func main() {
	// 문자열로 직접 사용
	fmt.Println("go.mod 내용:")
	fmt.Println(modFile)

	// embed.FS로 파일 시스템 접근
	entries, _ := fs.ReadDir(sqlFiles, "data")
	for _, e := range entries {
		fmt.Println("SQL 파일:", e.Name())
		content, _ := sqlFiles.ReadFile("data/" + e.Name())
		fmt.Println(string(content))
	}

	// http.FS와 연동
	// http.Handle("/static/",
	//     http.StripPrefix("/static/",
	//         http.FileServer(http.FS(staticFS))))
	fmt.Println("embed.FS는 io/fs.FS 인터페이스를 구현합니다")
}

학습 팁

embed.FSio/fs.FS를 구현하므로 http.FS(), template.ParseFS() 등과 바로 연동됩니다.

주의할 점

//go:embed 디렉티브와 변수 선언 사이에 빈 줄이 있으면 동작하지 않습니다. 바로 다음 줄에 var를 선언하세요.

자주 묻는 질문

embed 심화란 무엇인가요?

//go:embed 로 파일을 바이너리에 포함합니다. 정적 자산, 마이그레이션 SQL, 템플릿 등에 활용합니다.

embed 심화 학습 시 주의할 점은 무엇인가요?

//go:embed 디렉티브와 변수 선언 사이에 빈 줄이 있으면 동작하지 않습니다. 바로 다음 줄에 var 를 선언하세요.