HiveBrain v1.2.0
Get Started
← Back to all entries
patterngoMajor

In Go HTTP handlers, why is the ResponseWriter a value but the Request a pointer?

Submitted by: @import:stackoverflow-api··
0
Viewed 0 times
pointerresponsewriterwhyhandlersrequestthevaluebuthttp

Problem

I'm learning Go by writing an app for GAE, and this is signature of a handler function:

func handle(w http.ResponseWriter, r *http.Request) {}


I'm pointer newbie here, so why is the Request object a pointer, but the ResponseWriter not? Is there any need to have it this way or is this just to make some kind of advanced pointer based code possible?

Solution

What you get for w is a pointer to the non exported type http.response but as ResponseWriter is an interface, that's not visible.

From server.go:

type ResponseWriter interface {
    ...
}


On the other hand, r is a pointer to a concrete struct, hence the need to pass a reference explicitly.

From request.go:

type Request struct {
    ...
}

Code Snippets

type ResponseWriter interface {
    ...
}
type Request struct {
    ...
}

Context

Stack Overflow Q#13255907, score: 94

Revisions (0)

No revisions yet.