go net/url:使用字面空格解析的路径在原始方式下无法正确地进行字符串化,导致信息丢失,

gmol1639  于 4个月前  发布在  Go
关注(0)|答案(1)|浏览(36)

你正在使用的Go版本是什么(go version)?

$ go version
go version go1.13.4 linux/amd64

这个问题在最新版本中是否会重现?

是的

你正在使用什么操作系统和处理器架构(go env)?

go env 输出

$ go env
GO111MODULE=""
GOARCH="amd64"
GOBIN=""
GOCACHE="/home/adele/.cache/go-build"
GOENV="/home/adele/.config/go/env"
GOEXE=""
GOFLAGS=""
GOHOSTARCH="amd64"
GOHOSTOS="linux"
GONOPROXY=""
GONOSUMDB=""
GOOS="linux"
GOPATH="/home/adele/go"
GOPRIVATE=""
GOPROXY="https://proxy.golang.org,direct"
GOROOT="/usr/lib/go"
GOSUMDB="sum.golang.org"
GOTMPDIR=""
GOTOOLDIR="/usr/lib/go/pkg/tool/linux_amd64"
GCCGO="gccgo"
AR="ar"
CC="gcc"
CXX="g++"
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 -fmessage-length=0 -fdebug-prefix-map=/tmp/go-build138708956=/tmp/go-build -gno-record-
gcc-switches"

你做了什么?

在某些情况下,维护字符是否编码是非常重要的(例如,引用对象存储解决方案时的通配符)。
如果解析URL时有空格,它将成功解析,但它将选择返回重新编码的字面路径,而不是原始路径。(意外行为)
如果URL完全安全地编码,它将成功解析,然后选择返回原始路径。(预期行为)
以下示例展示了这两种情况:
https://play.golang.org/p/IeAIos8Wbx-

当你期望看到什么时?

如果我大致等效(在这里两者都大致等效),我希望在字符串化时得到完整的原始路径。

你看到了什么?

相反,我得到了一个编码的字面路径,导致信息丢失。

相关问题