Рассмотрим следующую программу:
package main
import "fmt"
func main() {
fmt.Println("Hello World!")
}
Если я построю это на моей машине Linux AMD64 (Go 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-упаковка, поэтому накладные расходы Go-runtime составляют примерно 700 Kb.
Огромный? Я думаю, вы не делаете много Java тогда! –
Ну, им из C/C++ фона! –
Я просто попробовал этот scala-родной мир приветствия: http://www.scala-native.org/en/latest/user/sbt.html#minimal-sbt-project Потребовалось довольно много времени, чтобы скомпилировать, загрузить много и двоичный файл - 3,9 МБ. – bli