我已经开始学习Go,到目前为止我发现它很有趣。为了让自己能更好地学习该语言,我决定使用go-github在Go中编写一个Gister。

我已经能够使用访问 token 来获取我所有的Gist,并且能够进行如下打印:

package main

import "fmt"
import "github.com/google/go-github/github"
import "code.google.com/p/goauth2/oauth"

func main() {
    t := &oauth.Transport{
        Token: &oauth.Token{AccessToken: "secretaccesstokenhere"},
    }

    client := github.NewClient(t.Client())

    gists, _, err := client.Gists.List("", nil)

    if err != nil {
        fmt.Println(err)
    } else {
        for _, g := range gists {
            fmt.Printf("%v\n\n", g.Files)
        }
    }
}

我得到以下输出:
map[TODO.md:github.GistFile{Size:166, Filename:"TODO.md", RawURL:"somerawurlhere"}]

map[fourcore.c:github.GistFile{Size:309, Filename:"fourcore.c", RawURL:"somerawurlhere"}]

map[coretest.cpp:github.GistFile{Size:160, Filename:"coretest.cpp", RawURL:"somerawurlhere"}]

我要打印的是“ID/FILENAME”。我知道我需要从上面的 map 中提取Gist类型的ID和文件名,但是我找不到解决方法。我怎么做?帮助将不胜感激。

附注:Here是描述Gist类型的文档。

最佳答案

您具有文件映射,其中文件名存储在GistFilename类型的键变量中,而ID在Gist类型变量中。因此,您必须具有两个范围-一个用于Gist,另一个用于File。
像这样:

    for _, g := range gists {
        for filename, _ := range g.Files {
            fmt.Printf("%v / %v\n", *g.ID, filename)
        }
    }

完整代码:
package main

import (
    "code.google.com/p/goauth2/oauth"
    "fmt"
    "github.com/google/go-github/github"
)

func main() {
    t := &oauth.Transport{
        Token: &oauth.Token{AccessToken: "secretaccesstokenhere"},
    }

    client := github.NewClient(t.Client())

    gists, _, err := client.Gists.List("", nil)

    if err != nil {
        fmt.Println(err)
        return
    }
    for _, g := range gists {
        for filename, _ := range g.Files {
            fmt.Printf("%v / %v\n", *g.ID, filename)
        }
    }
}

关于github - 从go-github Gist类型中提取信息,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/29252684/

10-12 03:25