在go client连接mongodb的时候,提示如下报错:
error parsing uri: unescaped @ sign in user info
跟踪代码发现,原来因为password中包含@特殊字符,mongo-go-driver在解析连接字符串时会检查是否包含特殊字符:
func (p *parser) parse(original string) error {
...
// fetch the hosts field
hosts := uri
if idx := strings.IndexAny(uri, "/?@"); idx != -1 {
if uri[idx] == '@' {
return fmt.Errorf("unescaped @ sign in user info")
}
if uri[idx] == '?' {
return fmt.Errorf("must have a / before the query ?")
}
hosts = uri[:idx]
}
...
将@替换为%40,也就是@的urlencode编码可解决此问题。