获取最新评论从 Github 的问题列表
来源:stackoverflow
时间:2024-02-28 10:27:22 388浏览 收藏
一分耕耘,一分收获!既然都打开这篇《获取最新评论从 Github 的问题列表》,就坚持看下去,学下去吧!本文主要会给大家讲到等等知识点,如果大家对本文有好的建议或者看到有不足之处,非常欢迎大家积极提出!在后续文章我会继续更新Golang相关的内容,希望对大家都有所帮助!
问题内容
我想知道使用 go 从 github 问题中检索最新评论的最有效方法是什么。
我实际上已经知道如何做到这一点,但我对性能不满意,所以我很想得到一些建议
package main import ( "context" "fmt" "github.com/google/go-github/github" "golang.org/x/oauth2" "net/url" "os" ) func main() { owner, repo := "owner", "repo" token := oauth2.Token{AccessToken: os.Getenv("GITHUB_TOKEN")} ts := oauth2.StaticTokenSource(&token) ctx := context.Background() tc := oauth2.NewClient(ctx, ts) gc := github.NewClient(tc) gc.BaseURL, _ = url.Parse("https://api.github.com/") opts := github.IssueListByRepoOptions{} issues, _, _ := gc.Issues.ListByRepo(ctx, owner, repo, &opts) // Implement Here: get latest comment for issues[0] return }
提前致谢:)
解决方案
您可以使用 rest api v3 或 graphql v4。如果您打算循环解决很多问题,graphql 绝对值得
使用 rest api v3
按照您的建议使用 go-github,您可以使用:
listcomments(ctx context.context, owner string, repo string, number int, opts *issuelistcommentsoptions)
例如来自this test
例如,获取最近 20 个打开的问题的最后评论(从您的代码中)。
package main import ( "context" "github.com/google/go-github/github" "golang.org/x/oauth2" "net/url" "os" "log" ) func main() { owner, repo := "google", "gson" token := oauth2.token{accesstoken: os.getenv("github_token")} ts := oauth2.statictokensource(&token) ctx := context.background() tc := oauth2.newclient(ctx, ts) gc := github.newclient(tc) gc.baseurl, _ = url.parse("https://api.github.com/") opts := github.issuelistbyrepooptions{} issues, _, _ := gc.issues.listbyrepo(ctx, owner, repo, &opts) for i := 0; i < len(issues); i++ { opt := &github.issuelistcommentsoptions{} comments, _, err := gc.issues.listcomments(ctx, owner, repo, *issues[i].number, opt) if err != nil { log.println(err) } else if len(comments) > 0 { log.println(*comments[0].body) } else { log.println("no comment for this issue") } } }
它将执行:
- 一个获取最近 20 个已打开问题的请求
- 每个问题都有一个请求以获取最新评论
总共有 21 个请求
使用 graphql v4
您可以使用 githubv4 library 来使用 Github GraphQL v4。
与前面 graphql 中的示例相同:
package main import ( "context" "github.com/shurcooL/githubv4" "golang.org/x/oauth2" "os" "encoding/json" "log" ) func main() { owner, repo := "google", "gson" token := oauth2.Token{AccessToken: os.Getenv("GITHUB_TOKEN")} ts := oauth2.StaticTokenSource(&token) httpClient := oauth2.NewClient(context.Background(), ts) client := githubv4.NewClient(httpClient) { var q struct { Repository struct { Issues struct { Nodes []struct { Number int Comments struct { Nodes []struct { Body githubv4.String } } `graphql:"comments(last:$commentsLast)"` } PageInfo struct { EndCursor githubv4.String HasNextPage githubv4.Boolean } } `graphql:"issues(last:$issuesLast,states:OPEN)"` } `graphql:"repository(owner:$repositoryOwner,name:$repositoryName)"` } variables := map[string]interface{}{ "repositoryOwner": githubv4.String(owner), "repositoryName": githubv4.String(repo), "issuesLast": githubv4.NewInt(20), "commentsLast": githubv4.NewInt(1), } err := client.Query(context.Background(), &q, variables) if err != nil { log.Println(err) return } printJSON(q) } } func printJSON(v interface{}) { w := json.NewEncoder(os.Stdout) w.SetIndent("", "\t") err := w.Encode(v) if err != nil { panic(err) } }
这是对 github 存储库中的 the example 的修改
上面的代码将执行 1 个请求
今天关于《获取最新评论从 Github 的问题列表》的内容介绍就到此结束,如果有什么疑问或者建议,可以在golang学习网公众号下多多回复交流;文中若有不正之处,也希望回复留言以告知!
声明:本文转载于:stackoverflow 如有侵犯,请联系study_golang@163.com删除
相关阅读
更多>
-
502 收藏
-
502 收藏
-
501 收藏
-
501 收藏
-
501 收藏
最新阅读
更多>
-
139 收藏
-
204 收藏
-
325 收藏
-
477 收藏
-
486 收藏
-
439 收藏
-
357 收藏
-
352 收藏
-
101 收藏
-
440 收藏
-
212 收藏
-
143 收藏
课程推荐
更多>
-
- 前端进阶之JavaScript设计模式
- 设计模式是开发人员在软件开发过程中面临一般问题时的解决方案,代表了最佳的实践。本课程的主打内容包括JS常见设计模式以及具体应用场景,打造一站式知识长龙服务,适合有JS基础的同学学习。
- 立即学习 542次学习
-
- GO语言核心编程课程
- 本课程采用真实案例,全面具体可落地,从理论到实践,一步一步将GO核心编程技术、编程思想、底层实现融会贯通,使学习者贴近时代脉搏,做IT互联网时代的弄潮儿。
- 立即学习 508次学习
-
- 简单聊聊mysql8与网络通信
- 如有问题加微信:Le-studyg;在课程中,我们将首先介绍MySQL8的新特性,包括性能优化、安全增强、新数据类型等,帮助学生快速熟悉MySQL8的最新功能。接着,我们将深入解析MySQL的网络通信机制,包括协议、连接管理、数据传输等,让
- 立即学习 497次学习
-
- JavaScript正则表达式基础与实战
- 在任何一门编程语言中,正则表达式,都是一项重要的知识,它提供了高效的字符串匹配与捕获机制,可以极大的简化程序设计。
- 立即学习 487次学习
-
- 从零制作响应式网站—Grid布局
- 本系列教程将展示从零制作一个假想的网络科技公司官网,分为导航,轮播,关于我们,成功案例,服务流程,团队介绍,数据部分,公司动态,底部信息等内容区块。网站整体采用CSSGrid布局,支持响应式,有流畅过渡和展现动画。
- 立即学习 484次学习