Go1.16의 새로운 기능 embed 시도
이게 무슨 기분 좋은 말인지 말하자면 보통 이진 파일 외에 필요한 파일(CSS 파일, js 파일, 기타 각양각색의 파일)이 있기 때문에 함께 복사해야 하지만 복사를 잊어버리거나 잘못된 파일을 쓰는 등 오류가 발생할 수 있다.
새 기능의 embed 기능을 사용하여 필요한 파일을 디렉터리 구조를 유지한 상태에서 삽입합니다
또 메모리에 파일 시스템이 있어 디스크에서 읽는 것보다 성능이 좋다.
2021년 2월 16일 Go 1.16이 발매돼 설치를 시도했기 때문이다.
컨디션
https://golang.org/dl/ Stable Versions 1.16에서 msi 파일 다운로드
>go version
go version go1.16 windows/amd64
응용 프로그램에 일본어 글꼴 파일을 포함하는 일본어 PDF 생성 응용 프로그램을 만들어 봅니다.https://github.com/signintech/gopdf
소스 코드는 다음과 같습니다.
package main
import (
"bytes"
"embed"
"log"
"path"
"github.com/signintech/gopdf"
)
//go:embed embed/*.*
var assets embed.FS
func main() {
//PDF準備
pdf := gopdf.GoPdf{}
pdf.Start(gopdf.Config{PageSize: *gopdf.PageSizeA4})
pdf.AddPage()
//ディレクトリ確認
direntry, err := assets.ReadDir("embed")
if err != nil {
log.Print(err.Error())
return
}
var fontnames []string
var fontname string
for _, fontfile := range direntry {
//フォントファイルを読み込んで登録。フォントの名称はフォントファイル名を採用
filepath := path.Join("embed", fontfile.Name())
filebyte, err := assets.ReadFile(filepath)
if err != nil {
log.Print(err.Error())
return
}
rd := bytes.NewReader(filebyte)
fontname = fontfile.Name()
fontnames = append(fontnames, fontname)
err = pdf.AddTTFFontByReader(fontname, rd)
if err != nil {
log.Print(err.Error())
return
}
}
var yOffset float64
for idx, fn := range fontnames {
err = pdf.SetFont(fn, "", 14)
if err != nil {
log.Print(err.Error())
return
}
yOffset = 50 * (1 + float64(idx))
pdf.SetX(1.0)
pdf.SetY(yOffset)
pdf.Text("こんにちは.Go embed fontfile(" + fn + ")")
}
pdf.WritePdf("helloEmbed.pdf")
}
를 실행하면 다음과 같이 일본어 PDF가 생성됩니다.EXE는 사이즈가 커지지만 나눠주는 물건이 EXE밖에 없기 때문에 사내 부분에 작은 앱을 보내는 것이 가장 적합하다.
Reference
이 문제에 관하여(Go1.16의 새로운 기능 embed 시도), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다 https://zenn.dev/kotapon/articles/6a2919ceed0cdb텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념 (Collection and Share based on the CC Protocol.)