Go1.16의 새로운 기능 embed 시도

10298 단어 Gotech
Go 1.16의 새로운 기능으로 구축된 바이너리에 파일을 삽입하는 기능이 있습니다.
이게 무슨 기분 좋은 말인지 말하자면 보통 이진 파일 외에 필요한 파일(CSS 파일, js 파일, 기타 각양각색의 파일)이 있기 때문에 함께 복사해야 하지만 복사를 잊어버리거나 잘못된 파일을 쓰는 등 오류가 발생할 수 있다.
새 기능의 embed 기능을 사용하여 필요한 파일을 디렉터리 구조를 유지한 상태에서 삽입합니다
  • 리소스 복제 시간 단축
  • 필요한 파일을 분실 또는 재작성
  • 이런 좋은 점이 나왔다.
    또 메모리에 파일 시스템이 있어 디스크에서 읽는 것보다 성능이 좋다.
    2021년 2월 16일 Go 1.16이 발매돼 설치를 시도했기 때문이다.
    컨디션
  • Windows 10 Home 20H2

  • https://golang.org/dl/ Stable Versions 1.16에서 msi 파일 다운로드
  • msi 파일을 두 번 클릭하여 설치 프로그램을 시작하고 필요할 때 설치 위치를 변경하여 설치
  • 버전 확인을 위한 명령 프롬프트 시작
  • >go version
    go version go1.16 windows/amd64
    
    응용 프로그램에 일본어 글꼴 파일을 포함하는 일본어 PDF 생성 응용 프로그램을 만들어 봅니다.
  • PDF의 프로그램 라이브러리는 일본어 글꼴에 해당하는 gopdf를 사용합니다.
    https://github.com/signintech/gopdf
  • 일본어 글꼴은 IPAex 명나라와 IPAex Gothic(Ver.0004.01)를 사용합니다.
  • 이번 목록 구조는 다음과 같은 형식이다.embed 디렉토리 아래에 포함됩니다.

    소스 코드는 다음과 같습니다.
    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밖에 없기 때문에 사내 부분에 작은 앱을 보내는 것이 가장 적합하다.

    좋은 웹페이지 즐겨찾기