메뉴

문서정보

Go 1.16 발표

2021년 2월 16일 Go 1.16이 발표됐다. Go 1.16은 []https://golang.org/dl/ 다운로드 페이지]에서 다운로드 할 수 있다. 곧바로 설치했다.
# wget  https://golang.org/dl/go1.16.linux-amd64.tar.gz
# tar -xvzf go1.16.linux-amd64.tar.gz /usr/local 
# go version
go version go1.16 linux/amd64

1.16의 주요 기능은 아래와 같다.

embed package

코드에서 //go:embed 문을 사용해서 컴파일 타임에 패키지 디렉토리 혹은 다른 하위 디렉토리에서 읽은 파일로 문자열, []byte 또는 FS 유형의 변수를 초기화 할 수 있다. 사용 방법은 이렇다.
import _ "embed"

//go:embed hello.txt
var s string
print(s)

여러 개의 파일과 디렉토리를 포함 할 수 있으며, 와일드카드 문자도 사용 할 수 있다.
//go:embed hello.txt tmpl/*
var f embed.F

간단한 테스트 코드
package main

import (
	"embed"
	"fmt"
)

// main.go 파일의 내용을 읽어서 string 변수에 저장한다.
//go:embed main.go
var code string

// hello.txt, tmpl/* 를 FS 변수에 저장한다.
//go:embed hello.txt tmpl/*
var f embed.FS

func main() {
	fmt.Println(code)
	data, _ := f.ReadFile("hello.txt")
	fmt.Println(string(data))
	data, _ = f.ReadFile("tmpl/hello.tmpl")
	fmt.Println(string(data))
}

이렇게 만든 코드를 빌드하면 파일이 실행파일에 embed 되기 때문에, "실행파일 하나만 배포" 하면 된다. 버전관리도 편해졌다. 예전에는 ldflag를 이용해서 관리했는데, embed 패키지로 깔끔하게 관리 할 수 있게 됐다.
# cat version.txt
1.0.0-as99dhj
package main

import (
	_ "embed"
	"fmt"
)

//go:embed version.txt
var version string

func main() {
	fmt.Print(version)
}

... 계속