你正在使用哪个版本的Go( go version
)?
$ go version
go version go1.11.1 darwin/amd64
这个问题在最新版本中是否会重现?
是的。
你正在使用什么操作系统和处理器架构( go env
)?
go env
输出
$ go env
GOARCH="amd64"
GOBIN=""
GOCACHE="/Users/harald/Library/Caches/go-build"
GOEXE=""
GOFLAGS=""
GOHOSTARCH="amd64"
GOHOSTOS="darwin"
GOOS="darwin"
GOPATH="/Users/harald/go"
GOPROXY=""
GORACE=""
GOROOT="/usr/local/Cellar/go/1.11.1/libexec"
GOTMPDIR=""
GOTOOLDIR="/usr/local/Cellar/go/1.11.1/libexec/pkg/tool/darwin_amd64"
GCCGO="gccgo"
CC="clang"
CXX="clang++"
CGO_ENABLED="1"
GOMOD=""
CGO_CFLAGS="-g -O2"
CGO_CPPFLAGS=""
CGO_CXXFLAGS="-g -O2"
CGO_FFLAGS="-g -O2"
CGO_LDFLAGS="-g -O2"
PKG_CONFIG="pkg-config"
GOGCCFLAGS="-fPIC -m64 -pthread -fno-caret-diagnostics -Qunused-arguments -fmessage-length=0 -fdebug-prefix-map=/var/folders/w3/11rv94110qnc2l400nlz7gmc0000gn/T/go-build136867624=/tmp/go-build -gno-record-gcc-switches -fno-common"
你期望看到什么?
在我看来,当使用ReverseProxy.ErrorHandler(来自 package httputil
)时,一个很好的模式是在错误上进行自省,对某些类型的错误进行特殊处理或忽略,然后回退到默认的错误处理。
因此,我想导出这个函数,这样我就不必重新实现它(以及重新实现 logf
):
func (p *ReverseProxy) defaultErrorHandler(rw http.ResponseWriter, req *http.Request, err error) {
p.logf("http: proxy error: %v", err)
rw.WriteHeader(http.StatusBadGateway)
}
另一个好处是,随着Go版本的进步,你会收到对此逻辑的更新,而复制过来的代码会过时。
1条答案
按热度按时间xn1cxnb41#
我目前的解决方法是将该方法转换为一个函数,并将
ReverseProxy
作为第一个参数,以便在本地定义它: