Parsing 将标志变量传递给go程序,导致输出异常

Parsing 将标志变量传递给go程序,导致输出异常,parsing,command-line,parameters,go,Parsing,Command Line,Parameters,Go,我试图在我的代码中使用长的github url作为参数。它适用于所有其他url类型,如组织或星探。然而,当我尝试使用搜索结果页面时,我得到了上面奇怪的输出 这是一个bash命令行(或者mac使用的任何命令行)&和?是必须转义的shell元字符。shell完全不知道URL是什么,也不应该这样做 package main import ( "flag" "log" "strings" "github.com/PuerkitoBio/goquery" ) typ

我试图在我的代码中使用长的github url作为参数。它适用于所有其他url类型,如组织或星探。然而,当我尝试使用搜索结果页面时,我得到了上面奇怪的输出

这是一个bash命令行(或者mac使用的任何命令行)
&
是必须转义的shell元字符。shell完全不知道URL是什么,也不应该这样做

package main

import (
    "flag"
    "log"
    "strings"

    "github.com/PuerkitoBio/goquery"
)

type user struct {
    name     string
    email    string
    url      string
    username string
}

func main() {
    url := flag.String("github_url", "", "github url you want to scrape")
    flag.Parse()
    githubURL := *url
    doc, err := goquery.NewDocument(githubURL)
    if err != nil {
        log.Fatal(err)
    }

    if strings.Contains(githubURL, "/orgs/") {
        scrapeOrganization(doc, githubURL)
    } else if strings.Contains(githubURL, "/search?") {
        scrapeSearch(doc, githubURL)
    } else if strings.Contains(githubURL, "/stargazers") {
        scrapeStarGazers(doc, githubURL)
    } else {
        scrapeProfile(doc)
    }
}
添加引号将阻止shell解析元字符。另一种方法是自己手动转义每个元字符:

go 'http://....'
   ^-----------^
这很快就会变得单调乏味,而且容易出错

go 'http://....'
   ^-----------^
go http://example.com/script.php\?foo=bar\&baz=qux
                                ^--------^