[Go] 정적파일 로드하기 (feat. image)

Falcon·2023년 3월 6일
1

go

목록 보기
11/11
post-thumbnail

문제 상황

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 파일의 바이너리 데이터를 로드하는 것과 같다.)

profile
I'm still hungry

0개의 댓글