निम्नलिखित कार्यक्रम पर विचार करें:
package main
import "fmt"
func main() {
fmt.Println("Hello World!")
}
अगर मैं इसे अपने लिनक्स AMD64 मशीन (1.9 1.9) पर बनाता हूं, तो इस तरह:
$ go build
$ ls -la helloworld
-rwxr-xr-x 1 janf group 2029206 Sep 11 16:58 helloworld
मुझे आ बाइनरी मिलती है जो आकार में लगभग 2 एमबी है।
इसका कारण (जिसे अन्य उत्तरों में समझाया गया है) यह है कि हम "fmt" पैकेज का उपयोग कर रहे हैं जो काफी बड़ा है, लेकिन बाइनरी को भी नहीं छीन लिया गया है और इसका मतलब है कि प्रतीक तालिका अभी भी है। यदि हम बाइनरी को हटाने के लिए कंपाइलर को निर्देश देते हैं, तो यह बहुत छोटा हो जाएगा:
$ go build -ldflags "-s -w"
$ ls -la helloworld
-rwxr-xr-x 1 janf group 1323616 Sep 11 17:01 helloworld
हालांकि, अगर हम fmt.Println के बजाय, इस तरह से अंतर्निहित फ़ंक्शन प्रिंट का उपयोग करने के लिए प्रोग्राम को फिर से लिखते हैं:
package main
func main() {
print("Hello World!\n")
}
और फिर इसे संकलित करें:
$ go build -ldflags "-s -w"
$ ls -la helloworld
-rwxr-xr-x 1 janf group 714176 Sep 11 17:06 helloworld
हम एक और भी छोटे बाइनरी के साथ समाप्त होते हैं। यह उतना ही छोटा है जितना कि हम इसे UPX- पैकिंग जैसे ट्रिक्स का सहारा लिए बिना प्राप्त कर सकते हैं, इसलिए गो-रनटाइम का ओवरहेड लगभग 700 Kb है।