golang——mongodb driver

675 阅读1分钟

在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编码可解决此问题。