Go 애플리케이션에서 build 한 exe , .app 등의 실행파일이 오로지 Project root 디렉토리에서만 실행되는 현상이 발견됐다.
go build 해서 실행 파일이 생성되면 실행 파일에 모든 필요한 데이터가 있을 것 같지만, 프로그램 내에서 런타임에 이미지를 불러오거나, html 페이지를 띄우는 등의 코드가 있다면, 이미지와 .html 파일은 실행 파일에 포함되지 않을 수 있다.
go:embed
를 사용하면 된다.
string
, byte[]
, embed.FS
3가지 타입을 지원한다.
// 바이너리 형태로 로딩
go:embed img.png
var binaryFile byte[]
// 텍스트파일 문자열로 로딩
go:embed hello.txt
var textStr string
// 디렉토리 내 파일 로딩
go:embed curDir
var assets embed.FS
과도하게 파일을 많은 파일을 embed 할 경우 프로세스 메모리 할당량이 커진다.
embed 시 실행 파일에 모든 바이너리 데이터가 담기게 되고 이 데이터를 주기억 장치에 적재하며 프로그램이 실행되기 때문이다. (모든 embed 파일의 바이너리 데이터를 로드하는 것과 같다.)