Parsing deeplinks by url.Parse may fail


1 min read


This question starts with a deeplink 1mg://

package main  

import (  

func main() {  
    // <nil> parse "1mg://": first path segment in URL cannot contain colon  

[Go Playground]

Is it a bug?

After I test some cases, I found that url.Parse doesn't limit the scheme of uri to http or https. It failed if the scheme starts with a digit.

Here is the comment for parsing scheme:

// Maybe rawURL is of the form scheme:path.
// (Scheme must be [a-zA-Z][a-zA-Z0-9+.-]*)
// If so, return scheme, path; else return "", rawURL.
func getScheme(rawURL string) (scheme, path string, err error) {

In the document of URI RFC 3986

scheme = ALPHA *( ALPHA / DIGIT / "+" / "-" / "." )

It means that uri scheme implementation of golang fit the standard.