Did you try to analyze your dependencies? Example how to do it: https://hackernoon.com/a-story-of-a-fat-go-binary-20edc6549b97
On Wednesday, January 9, 2019 at 7:45:44 AM UTC+3, hasan.abd...@mtic.co.jp wrote: > > I'm using go 1.11.2 and the build time for a small project (less than 10k > LOC) is about 2 seconds when I just run `go build main.go` > > > I tried searching online for tips and tricks to improve compile times, but > most advice is outdated. For example, some people recommend passing '-i' > or something to make the compiler cache intermediate results and reuse them > for subsequent builds, but the recent versions of the compiler now do this > by default. > > > Of course, if we count all the libraries I'm using (vendored) the LOC > count probably goes above 100k, but I don't think this is an issue, because > of caching, and because when I run `go build -x` I found out that the > majority of the build time is spent waiting on the linker. The actual > compilation happens reasonably quickly; it's the linker that's taking most > of the time. > > > After some Googling, I found I could pass '-s -w' to the linker to make > it skip on embedding debug information (Documented here > <https://golang.org/cmd/link/>) > > > go build -ldflags '-s -w' main.go > > > Doing this, the build times dropped from 2 seconds to around 1 second. > > > I'm not sure what other options are available (if any?) to reduce the time > required for the linker. > > > Is there perhaps a way to use another linker that is faster? At least > during development. > > > I'd really like the whole process to finish in under 400ms, so that the > edit-build-run cycle can be made to feel *almost* as if building is > near-instant. > > > If it helps, by passing '-v' to the linker, it outputs something like > this: > > > HEADER = -H1 -T0x1001000 -D0x0 -R0x1000 > > 0.00 deadcode > > 0.06 pclntab=2652352 bytes, funcdata total 516696 bytes > > 0.06 dodata > > 0.07 symsize = 0 > > 0.07 symsize = 0 > > 0.08 dynreloc > > 0.10 reloc > > 0.11 asmb > > 0.11 codeblk > > 0.13 datblk > > 0.14 sym > > 0.15 headr > > 0.24 host link: "clang" "-m64" "-Wl,-headerpad,1144" "-Wl,-no_pie" > "-Wl,-pagezero_size,4000000" "-o" "[....]/exe/a.out" "-Qunused-arguments" > "[....]/go-link-718013919/go.o" "[....]/go-link-718013919/000000.o" > "[....]/000001.o" "[....]/000002.o" "[....]/000003.o" "[....]/000004.o" > "[....]/000005.o" "[....]/000006.o" "[....]/go-link-718013919/000007.o" > "[....]/go-link-718013919/000008.o" "[....]/go-link-718013919/000009.o" > "[....]/go-link-718013919/000010.o" "[....]/go-link-718013919/000011.o" > "[....]/go-link-718013919/000012.o" "[....]/go-link-718013919/000013.o" > "[....]/go-link-718013919/000014.o" "[....]/go-link-718013919/000015.o" > "[....]/go-link-718013919/000016.o" "[....]/go-link-718013919/000017.o" > "[....]/go-link-718013919/000018.o" "[....]/go-link-718013919/000019.o" > "[....]/go-link-718013919/000020.o" "[....]/go-link-718013919/000021.o" > "[....]/go-link-718013919/000022.o" "[....]/go-link-718013919/000023.o" > "[....]/go-link-718013919/000024.o" "[....]/go-link-718013919/000025.o" > "[....]/go-link-718013919/000026.o" "[....]/go-link-718013919/000027.o" > "[....]/go-link-718013919/000028.o" "[....]/go-link-718013919/000029.o" > "[....]/go-link-718013919/000030.o" "[....]/go-link-718013919/000031.o" > "-g" "-O2" "-g" "-O2" "-g" "-O2" "-g" "-O2" "-lpthread" "-g" "-O2" > "-framework" "CoreFoundation" "-framework" "Security" "-no-pie" > > 0.39 cpu time > > 144230 symbols > > 321736 liveness data > > > It seems like this line `0.39 cpu time` indicates the total time spent by > the linker. > > > Incidentally, when I pass `-v` only without `-s -w`, the output of the > linker becomes `1.52 cpu time`, So `-s -w` shaves off a whole second (and > then some). > > > > -- You received this message because you are subscribed to the Google Groups "golang-nuts" group. To unsubscribe from this group and stop receiving emails from it, send an email to golang-nuts+unsubscr...@googlegroups.com. For more options, visit https://groups.google.com/d/optout.