Hãy xem xét chương trình sau:
package main
import "fmt"
func main() {
fmt.Println("Hello World!")
}
Nếu tôi tạo điều này trên máy Linux AMD64 (Go 1.9) của mình, như sau:
$ go build
$ ls -la helloworld
-rwxr-xr-x 1 janf group 2029206 Sep 11 16:58 helloworld
Tôi nhận được aa nhị phân có kích thước khoảng 2 Mb.
Lý do cho điều này (đã được giải thích trong các câu trả lời khác) là chúng ta đang sử dụng gói "fmt" khá lớn, nhưng nhị phân cũng chưa bị loại bỏ và điều này có nghĩa là bảng ký hiệu vẫn còn đó. Thay vào đó, nếu chúng tôi hướng dẫn trình biên dịch tách tệp nhị phân, nó sẽ trở nên nhỏ hơn nhiều:
$ go build -ldflags "-s -w"
$ ls -la helloworld
-rwxr-xr-x 1 janf group 1323616 Sep 11 17:01 helloworld
Tuy nhiên, nếu chúng ta viết lại chương trình để sử dụng hàm print, thay vì fmt.Println, như sau:
package main
func main() {
print("Hello World!\n")
}
Và sau đó biên dịch nó:
$ go build -ldflags "-s -w"
$ ls -la helloworld
-rwxr-xr-x 1 janf group 714176 Sep 11 17:06 helloworld
Chúng tôi kết thúc với một nhị phân thậm chí còn nhỏ hơn. Điều này nhỏ nhất mà chúng ta có thể lấy được mà không cần dùng đến các thủ thuật như đóng gói UPX, vì vậy chi phí của thời gian chạy Go là khoảng 700 Kb.