라는 파일을 만들고 main.go
간단한 hello world 프로그램으로 시도해 봅시다.
package main
import "fmt"
func main(){
fmt.Println("Hello World!")
}
go 버전 1.9.1을 사용합니다.
$ go version
go version go1.9.1 linux/amd64
표준 go build
명령으로 컴파일하십시오 .
$ go build main.go
$ ls -lh
-rwxr-xr-x-x 1 nil nil 1.8M Oct 27 07:47 main
이제 다시 한번 컴파일하자 go build
만에 ldflags
, 위의 제안
$ go build -ldflags "-s -w" main.go
$ ls -lh
-rwxr-xr-x-x 1 nil nil 1.2M Oct 27 08:15 main
파일 크기가 30 % 줄어 듭니다.
이제 사용 할 수 있습니다 gccgo
,
$ go version
go version go1.8.1 gccgo (GCC) 7.2.0 linux/amd64
건물은 gccgo
,
$ go build main.go
$ ls -lh
-rwxr-xr-x 1 nil nil 34K Oct 27 12:18 main
바이너리 크기는 거의 100 % 감소합니다. 이제 다시 한 번 우리의 구축 해보자 main.go
으로 gccgo
하지만, 빌드 플래그
$ go build -gccgoflags "-s -w" main.go
-rwxr-xr-x 1 nil nil 23K Oct 27 13:02 main
경고 :
로 gccgo
바이너리가 동적으로 연결되어 있었다. 크기가 매우 큰 바이너리가있는 경우 gccgo로 컴파일 할 때 바이너리가 100 % 줄어들지는 않지만 크기가 상당히 줄어 듭니다.
gc에 비해 gccgo는 코드 컴파일 속도가 느리지 만 더 강력한 최적화를 지원하므로 gccgo로 빌드 된 CPU 바인딩 프로그램은 일반적으로 더 빠르게 실행됩니다. 인라인, 루프 최적화, 벡터화, 명령어 스케줄링 등을 포함하여 수년 동안 GCC에서 구현 된 모든 최적화를 사용할 수 있습니다. 항상 더 나은 코드를 생성하지는 않지만 gccgo로 컴파일 된 프로그램이 30 % 더 빠르게 실행될 수 있습니다.
GCC 7 릴리스에는 Go 1.8 사용자 라이브러리의 완전한 구현이 포함될 것으로 예상됩니다. 이전 릴리스와 마찬가지로 Go 1.8 런타임은 완전히 병합되지 않았지만 Go 프로그램에 표시되지 않아야합니다.
장점 :
- 축소 된 크기
- 최적화되었습니다.
단점
- 느린
- 최신 버전의
go
.
여기 와 여기에서 볼 수 있습니다 .