Closed7
goでflagのみを使ったバイナリとspf13/pflagを使ったバイナリのサイズがどれくらい違うのか気になった
0.2Mbの増加だけなので誤差っぽい
$ make
mkdir -p bin
go build -o bin/use_flag ./00flag/
go build -o bin/use_pflag ./01pflag/
ls -lh bin
total 3.8M
-rwxr-xr-x 1 podhmo podhmo 1.8M Aug 20 22:05 use_flag
-rwxr-xr-x 1 podhmo podhmo 2.0M Aug 20 22:05 use_pflag
詳細のgist
増減したパッケージ(依存)
$ diff -u <(strings bin/use_flag | grep -F '..inittask' | sort) <(strings bin/use_pflag | grep -F '..inittask' | sort)
そもそも増えたのがnet関係のパッケージだけかも
--- /dev/fd/63 2022-08-20 22:22:05.521753142 +0900
+++ /dev/fd/62 2022-08-20 22:22:05.521753142 +0900
@@ -1,11 +1,22 @@
+bufio..inittask
+bytes..inittask
+context..inittask
+encoding/base64..inittask
+encoding/binary..inittask
+encoding/csv..inittask
+encoding/hex..inittask
errors..inittask
flag..inittask
fmt..inittask
+github.com/spf13/pflag..inittask
internal/bytealg..inittask
internal/fmtsort..inittask
+internal/godebug..inittask
+internal/intern..inittask
internal/oserror..inittask
internal/poll..inittask
internal/reflectlite..inittask
+internal/singleflight..inittask
internal/syscall/execenv..inittask
internal/syscall/unix..inittask
internal/testlog..inittask
@@ -13,10 +24,13 @@
io/fs..inittask
main..inittask
math..inittask
+net..inittask
+net/netip..inittask
os..inittask
path..inittask
reflect..inittask
runtime..inittask
+runtime/cgo..inittask
sort..inittask
strconv..inittask
strings..inittask
@@ -24,3 +38,4 @@
syscall..inittask
time..inittask
unicode..inittask
+vendor/golang.org/x/net/dns/dnsmessage..inittask
stringsで雑にやるよりはgo tool nmとかでsymbolを取り出したほうが良かったかもしれない。
(..inittaskはパッケージごとに常にありそうなのでこれを数えている)
encoding関係も増えてますね。。
パッケージごとのサイズ
これを調べる方法をそう言えば調べていなかった。なんかコマンドがありそう。goweightを使えば良いらしい。
$ diff -u <(goweight ./00flag/) <(goweight ./01pflag/)
結果のdiff
--- /dev/fd/63 2022-08-20 22:38:39.221739684 +0900
+++ /dev/fd/62 2022-08-20 22:38:39.221739684 +0900
@@ -1,28 +1,42 @@
8.7 MB runtime
+ 3.5 MB net
3.1 MB reflect
+ 2.6 MB github.com/spf13/pflag
1.6 MB syscall
+ 1.0 MB vendor/golang.org/x/net/dns/dnsmessage
930 kB time
870 kB internal/reflectlite
857 kB os
775 kB fmt
642 kB internal/poll
+ 578 kB net/netip
571 kB math
518 kB unicode
510 kB strconv
504 kB strings
446 kB flag
+ 399 kB bytes
+ 354 kB bufio
+ 350 kB encoding/binary
302 kB io
301 kB sync
278 kB io/fs
245 kB sort
238 kB runtime/internal/atomic
+ 208 kB context
+ 143 kB runtime/cgo
+ 135 kB encoding/csv
+ 128 kB encoding/base64
99 kB math/bits
96 kB sync/atomic
94 kB internal/cpu
+ 86 kB encoding/hex
75 kB internal/fmtsort
74 kB internal/bytealg
61 kB path
56 kB unicode/utf8
+ 53 kB internal/intern
+ 51 kB internal/singleflight
45 kB errors
42 kB internal/testlog
35 kB internal/syscall/unix
@@ -30,6 +44,8 @@
28 kB internal/abi
13 kB internal/race
9.9 kB internal/itoa
+ 7.6 kB internal/godebug
+ 7.6 kB internal/nettrace
6.9 kB internal/oserror
5.9 kB runtime/internal/math
5.9 kB internal/goexperiment
このスクラップは2023/07/03にクローズされました