• Brad Fitzpatrick's avatar
    net/http: use dynamic type assertion to remove HTTP server code from cmd/go · a96884cf
    Brad Fitzpatrick authored
    I was wondering why cmd/go includes the HTTP server implementations.
    
    Dumping the linker's deadcode dependency graph into a file and doing
    some graph analysis, I found that the only reason cmd/go included an
    HTTP server was because the maxBytesReader type (used by both the HTTP
    transport & HTTP server) did a static type assertion to an HTTP server
    type.
    
    Changing it to a interface type assertion reduces the size of cmd/go
    by 533KB (5.2%)
    
    On linux/amd64, cmd/go goes from 10549200 to 10002624 bytes.
    
    Add a test too so this doesn't regress. The test uses cmd/go as the
    binary to test (a binary which needs the HTTP client but not the HTTP
    server), but this change and test are equally applicable to any such
    program.
    
    Change-Id: I93865f43ec03b06d09241fbd9ea381817c2909c5
    Reviewed-on: https://go-review.googlesource.com/20763Reviewed-by: 's avatarMatthew Dempsky <mdempsky@google.com>
    Reviewed-by: 's avatarJosh Bleecher Snyder <josharian@gmail.com>
    Run-TryBot: Brad Fitzpatrick <bradfitz@golang.org>
    Reviewed-by: 's avatarDavid Crawshaw <crawshaw@golang.org>
    TryBot-Result: Gobot Gobot <gobot@golang.org>
    a96884cf
Name
Last commit
Last update
..
archive Loading commit data...
bufio Loading commit data...
builtin Loading commit data...
bytes Loading commit data...
cmd Loading commit data...
compress Loading commit data...
container Loading commit data...
crypto Loading commit data...
database/sql Loading commit data...
debug Loading commit data...
encoding Loading commit data...
errors Loading commit data...
expvar Loading commit data...
flag Loading commit data...
fmt Loading commit data...
go Loading commit data...
hash Loading commit data...
html Loading commit data...
image Loading commit data...
index/suffixarray Loading commit data...
internal Loading commit data...
io Loading commit data...
log Loading commit data...
math Loading commit data...
mime Loading commit data...
net Loading commit data...
os Loading commit data...
path Loading commit data...
reflect Loading commit data...
regexp Loading commit data...
runtime Loading commit data...
sort Loading commit data...
strconv Loading commit data...
strings Loading commit data...
sync Loading commit data...
syscall Loading commit data...
testing Loading commit data...
text Loading commit data...
time Loading commit data...
unicode Loading commit data...
unsafe Loading commit data...
vendor Loading commit data...
Make.dist Loading commit data...
all.bash Loading commit data...
all.bat Loading commit data...
all.rc Loading commit data...
androidtest.bash Loading commit data...
bootstrap.bash Loading commit data...
buildall.bash Loading commit data...
clean.bash Loading commit data...
clean.bat Loading commit data...
clean.rc Loading commit data...
iostest.bash Loading commit data...
make.bash Loading commit data...
make.bat Loading commit data...
make.rc Loading commit data...
nacltest.bash Loading commit data...
race.bash Loading commit data...
race.bat Loading commit data...
run.bash Loading commit data...
run.bat Loading commit data...
run.rc Loading commit data...