Closed7

goでflagのみを使ったバイナリとspf13/pflagを使ったバイナリのサイズがどれくらい違うのか気になった

podhmopodhmo

増減したパッケージ(依存)

$ 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はパッケージごとに常にありそうなのでこれを数えている)

podhmopodhmo

パッケージごとのサイズ

これを調べる方法をそう言えば調べていなかった。なんかコマンドがありそう。goweightを使えば良いらしい。

https://github.com/jondot/goweight

podhmopodhmo
$ 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にクローズされました