• 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
..
cgi Loading commit data...
cookiejar Loading commit data...
fcgi Loading commit data...
httptest Loading commit data...
httputil Loading commit data...
internal Loading commit data...
pprof Loading commit data...
testdata Loading commit data...
client.go Loading commit data...
client_test.go Loading commit data...
clientserver_test.go Loading commit data...
cookie.go Loading commit data...
cookie_test.go Loading commit data...
doc.go Loading commit data...
example_test.go Loading commit data...
export_test.go Loading commit data...
filetransport.go Loading commit data...
filetransport_test.go Loading commit data...
fs.go Loading commit data...
fs_test.go Loading commit data...
h2_bundle.go Loading commit data...
header.go Loading commit data...
header_test.go Loading commit data...
http_test.go Loading commit data...
jar.go Loading commit data...
lex.go Loading commit data...
lex_test.go Loading commit data...
main_test.go Loading commit data...
method.go Loading commit data...
npn_test.go Loading commit data...
proxy_test.go Loading commit data...
race.go Loading commit data...
range_test.go Loading commit data...
readrequest_test.go Loading commit data...
request.go Loading commit data...
request_test.go Loading commit data...
requestwrite_test.go Loading commit data...
response.go Loading commit data...
response_test.go Loading commit data...
responsewrite_test.go Loading commit data...
serve_test.go Loading commit data...
server.go Loading commit data...
sniff.go Loading commit data...
sniff_test.go Loading commit data...
status.go Loading commit data...
transfer.go Loading commit data...
transfer_test.go Loading commit data...
transport.go Loading commit data...
transport_test.go Loading commit data...
triv.go Loading commit data...