从go github Gist类型提取信息

从go github Gist类型提取信息,github,go,github-api,Github,Go,Github Api,我已经开始学习围棋,到目前为止我觉得它很有趣。为了更好地掌握这门语言,我决定用围棋写一篇注册表 我已经能够使用访问令牌获取我的所有注册表,并且我能够打印如下内容: package main import "fmt" import "github.com/google/go-github/github" import "code.google.com/p/goauth2/oauth" func main() { t := &oauth.Transport{ To

我已经开始学习围棋,到目前为止我觉得它很有趣。为了更好地掌握这门语言,我决定用围棋写一篇注册表

我已经能够使用访问令牌获取我的所有注册表,并且我能够打印如下内容:

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”。我知道我需要从上面的映射中提取Gist类型和文件名的ID,但我找不到这样做的方法。我该怎么做?非常感谢您的帮助


是描述Gist类型的文档。

您有文件映射,其中文件名存储在GistFilename类型的键变量中,ID存储在Gist类型变量中。所以你必须有两个范围-一个用于GIST,另一个用于文件。 大概是这样的:

    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)
        }
    }
}

谢谢你的帮助。还有一个问题:打印的ID与我打印GIST时看到的ID不同。它打印以下内容:
0xc20813af60
而不是
910349555dc0175ab949
。如何以我喜欢的格式获取它?啊,是的,我的bad-ID是*string类型(指向字符串的指针),因此0xc20813af60是这种类型的正确值(内存中的地址)。所以我们需要使用星号(*):fmt.Printf(“%v/%v\n”,*g.ID,filename)获取该地址的值。我已经用这个change.Perfect修改了上面的代码。非常感谢您的快速回复。这为我解决了很多问题。