验证我的存储库实际上是Go中的github存储库URL

Go 中是否有一种方法可以验证存储库类型字符串实际上是实际的 Github 存储库 URL?


我正在运行克隆存储库的代码,但在我运行exec之前。Command(“git”,“clone”,repo)和我想确保repo是有效的。


    package utils


    import (

        "os/exec"

    )


    //CloneRepo clones a repo lol

    func CloneRepo(args []string) {


        //repo URL

        repo := args[0]


        //verify that is an actual github repo URL


        //Clones Repo

        exec.Command("git", "clone", repo).Run()


    }


猛跑小猪
浏览 97回答 2
2回答

四季花海

下面是使用 net、net/url 和字符串包的简单方法。package mainimport (    "fmt"    "net"    "net/url"    "strings")func isGitHubURL(input string) bool {    u, err := url.Parse(input)    if err != nil {        return false    }    host := u.Host    if strings.Contains(host, ":") {         host, _, err = net.SplitHostPort(host)        if err != nil {            return false        }    }    return host == "github.com"}func main() {    urls := []string{        "https://github.com/foo/bar",        "http://github.com/bar/foo",        "http://github.com.evil.com",        "http://github.com:8080/nonstandard/port",        "http://other.com",        "not a valid URL",    }    for _, url := range urls {        fmt.Printf("URL: \"%s\", is GitHub URL: %v\n", url, isGitHubURL(url))    }}输出:URL: "https://github.com/foo/bar", is GitHub URL: trueURL: "http://github.com/bar/foo", is GitHub URL: trueURL: "http://github.com.evil.com", is GitHub URL: falseURL: "http://github.com:8080/nonstandard/port", is GitHub URL: trueURL: "http://other.com", is GitHub URL: falseURL: "not a valid URL", is GitHub URL: false

BIG阳

您可以使用专用的 git url 解析器,如下所示:package utilsimport (    "os/exec"    giturl "github.com/armosec/go-git-url")func isGitURL(repo string) bool {    _, err := giturl.NewGitURL(repo) // parse URL, returns error if none git url    return err == nil}//CloneRepo clones a repo lolfunc CloneRepo(args []string) {    //repo URL    repo := args[0]    //verify that is an actual github repo URL    if !isGitURL(repo) {        // return    }    //Clones Repo    exec.Command("git", "clone", repo).Run()}这将为您提供优势,不仅可以验证它是否是git存储库,而且您可以运行更多验证,以便作为所有者(),存储库()等。GetOwner()GetRepo()
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

Go