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.

Reply via email to