텍스트 파일 포함
텍스트 파일에 대해 이야기하는 경우 소스 코드 자체에 쉽게 삽입 할 수 있습니다. 역 따옴표를 사용하여 string
다음과 같이 리터럴 을 선언하십시오 .
const html = `
<html>
<body>Example embedded HTML content.</body>
</html>
`
// Sending it:
w.Write([]byte(html)) // w is an io.Writer
최적화 팁 :
대부분의 경우 리소스를에 쓰기 io.Writer
만하면되므로 []byte
변환 결과를 저장할 수도 있습니다 .
var html = []byte(`
<html><body>Example...</body></html>
`)
// Sending it:
w.Write(html) // w is an io.Writer
주의해야 할 사항은 원시 문자열 리터럴에는 역 따옴표 문자 (`)를 포함 할 수 없다는 것입니다. 원시 문자열 리터럴은 해석 된 문자열 리터럴과 달리 시퀀스를 포함 할 수 없으므로 포함하려는 텍스트에 역 따옴표가 포함되어 있으면 다음 예제와 같이 원시 문자열 리터럴을 분리하고 역 따옴표를 해석 된 문자열 리터럴로 연결해야합니다.
var html = `<p>This is a back quote followed by a dot: ` + "`" + `.</p>`
이러한 연결은 컴파일러에 의해 실행되므로 성능에는 영향을주지 않습니다.
바이너리 파일 포함
바이트 슬라이스로 저장
바이너리 파일 (예 : 이미지)의 경우 (결과 네이티브 바이너리와 관련하여) 가장 간결하고 가장 효율적인 것은 []byte
소스 코드에 파일의 내용을 포함하는 것 입니다. 이는 go-bindata 와 같은 타사 도구 / 라이브러리에서 생성 할 수 있습니다 .
이를 위해 타사 라이브러리를 사용하지 않으려는 경우 바이너리 파일을 읽고 파일 []byte
의 정확한 콘텐츠로 초기화 될 유형의 변수를 선언하는 Go 소스 코드를 출력하는 간단한 코드 스 니펫 이 있습니다.
imgdata, err := ioutil.ReadFile("someimage.png")
if err != nil {
panic(err)
}
fmt.Print("var imgdata = []byte{")
for i, v := range imgdata {
if i > 0 {
fmt.Print(", ")
}
fmt.Print(v)
}
fmt.Println("}")
파일에 0에서 16까지의 바이트가 포함 된 경우 출력 예 ( Go Playground 에서 시도 ) :
var imgdata = []byte{0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15}
base64로 저장 string
파일이 "너무 크지"않은 경우 (대부분의 이미지 / 아이콘이 적합 함) 다른 실행 가능한 옵션도 있습니다. 파일의 내용을 Base64로 변환하고 string
소스 코드에 저장할 수 있습니다. 응용 프로그램을 시작할 func init()
때 ( ) 또는 필요할 때 원본 []byte
콘텐츠로 디코딩 할 수 있습니다 . Go는 encoding/base64
패키지 에서 Base64 인코딩을 훌륭하게 지원 합니다.
(이진) 파일을 base64 string
로 변환하는 것은 다음과 같이 간단합니다.
data, err := ioutil.ReadFile("someimage.png")
if err != nil {
panic(err)
}
fmt.Println(base64.StdEncoding.EncodeToString(data))
결과 base64 문자열을 소스 코드에 저장합니다 (예 : const
.
디코딩은 단지 하나의 함수 호출입니다.
const imgBase64 = "<insert base64 string here>"
data, err := base64.StdEncoding.DecodeString(imgBase64) // data is of type []byte
인용 된대로 저장 string
base64로 저장하는 것보다 더 효율적이지만 이진 데이터 의 인용 된 문자열 리터럴을 저장하는 것이 소스 코드에서 더 길 수 있습니다 . strconv.Quote()
함수를 사용하여 문자열의 인용 된 형식을 얻을 수 있습니다 .
data, err := ioutil.ReadFile("someimage.png")
if err != nil {
panic(err)
}
fmt.Println(strconv.Quote(string(data))
0에서 64까지의 값을 포함하는 바이너리 데이터의 경우 다음과 같이 출력이 표시됩니다 ( Go Playground 에서 시도해보세요 ).
"\x00\x01\x02\x03\x04\x05\x06\a\b\t\n\v\f\r\x0e\x0f\x10\x11\x12\x13\x14\x15\x16\x17\x18\x19\x1a\x1b\x1c\x1d\x1e\x1f !\"#$%&'()*+,-./0123456789:;<=>?"
( strconv.Quote()
따옴표 를 추가하고 앞에 추가합니다.)
이 따옴표로 묶인 문자열을 소스 코드에 직접 사용할 수 있습니다. 예를 들면 다음과 같습니다.
const imgdata = "\x00\x01\x02\x03\x04\x05\x06\a\b\t\n\v\f\r\x0e\x0f\x10\x11\x12\x13\x14\x15\x16\x17\x18\x19\x1a\x1b\x1c\x1d\x1e\x1f !\"#$%&'()*+,-./0123456789:;<=>?"
사용할 준비가되었으며 디코딩 할 필요가 없습니다. 인용 해제는 컴파일 타임에 Go 컴파일러에 의해 수행됩니다.
다음과 같이 필요한 경우 바이트 슬라이스로 저장할 수도 있습니다.
var imgdata = []byte("\x00\x01\x02\x03\x04\x05\x06\a\b\t\n\v\f\r\x0e\x0f\x10\x11\x12\x13\x14\x15\x16\x17\x18\x19\x1a\x1b\x1c\x1d\x1e\x1f !\"#$%&'()*+,-./0123456789:;<=>?")