Вы можете увидеть, насколько большими являются двоичные файлы библиотеки, посмотрев в каталог $GOPATH/pkg
(если $GOPATH
не экспортируется go
по умолчанию $HOME/go
).
Итак, чтобы проверить размернекоторые из gorilla
http pkgs.Сначала установите их:
$ go get -u github.com/gorilla/mux
$ go get -u github.com/gorilla/securecookie
$ go get -u github.com/gorilla/sessions
Двоичные размеры в килобайтах на моем 64-разрядном MacOS (darwin_amd64
):
$ cd $GOPATH/pkg/darwin_amd64/github.com/gorilla/
$ du -k *
284 mux.a
128 securecookie.a
128 sessions.a
РЕДАКТИРОВАТЬ:
Размер библиотеки (пакета) - это одно, но сколько места занимает ваш исполняемый файл после этапа компоновки, может сильно различаться.Это связано с тем, что пакеты имеют свои собственные зависимости и вместе с этим поставляется дополнительный багаж , но этот багаж может использоваться совместно с другими пакетами, которые вы импортируете.
Пример, демонстрирующий это лучше всего:
empty.go:
package main
func main() {}
http.go:
package main
import "net/http"
var _ = http.Serve
func main() {}
mux.go:
package main
import "github.com/gorilla/mux"
var _ = mux.NewRouter
func main() {}
Все 3 программы функционально идентичны - выполняют нулевой код пользователя - но их зависимости различаются.Полученные двоичные размеры в KB
:
$ du -k *
1028 empty
5812 http
5832 mux
Что это говорит нам?Ядро go pkg net/http
значительно увеличивает размер нашего исполняемого файла.mux
pkg сам по себе невелик, но имеет зависимость от импорта net/http
pkg - отсюда и значительный размер файла для него.Тем не менее, разница между mux
и http
составляет всего 20KB
, тогда как указанный размер файла библиотеки mux.a составляет 284KB
.Поэтому мы не можем просто добавить размеры библиотек pkg, чтобы определить их истинную площадь.
Вывод: В процессе сборки компоновщик go будет отбирать много багажа из отдельных библиотек, ноЧтобы получить истинное представление о том, сколько вес импортирует определенные пакеты, нужно взглянуть также на все под-зависимости pkg .