Menu:
Requirement Github Token curl (this is Command) GitHub GraphQL API GitHub GraphQL API 
My Examples 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 # Type queries into this side of the screen,  and you will  # see intelligent typeaheads aware of the current GraphQL type schema,   # live syntax,  and validation errors highlighted within the text. # We'll get you started with a simple query showing your username! query {     viewer {       repositories(isFork: false   , last: 50 ){        totalCount       nodes{          name       }      }    }  } 
Test Example Change token for yourself token.
1 curl curl -H "Authorization: token your_token"  -H  "Content-Type:application/json"  -d '{"query": "{ viewer { repositories(isFork:false last: 50) { totalCount nodes { name }}}}"}'  https://api.github.com/graphql 
Output:
1 { "data" : { "viewer" : { "repositories" : { "totalCount" : 1 , "nodes" : [ { "name" : "ka1i.github.io" } ] } } } } 
Startup Coding Global setting
1 2 3 4 5 6 var  (	user     = "<Github Username>"  	token    = "<Github Token>"   	bareurl  = "https://github.com/"  	barepath = "./GitRepos/"  ) 
GitHub GraphQL API Use github.com/shurcooL/githubv4
1 2 3 4 5 6 7 8 9 10 11 var  QueryRepositories struct  {	Viewer struct  { 		Repositorys struct  { 			TotalCount githubv4.Int 			Nodes      []struct  { 				Name githubv4.String 			} 		} `graphql:"repositories(isFork: false, last: 50)"`  	} } 
Get repos list , use OAuth2
1 2 3 4 5 6 7 8 9 10 src := oauth2.StaticTokenSource( 	&oauth2.Token{AccessToken: your_token}, ) httpClient := oauth2.NewClient(context.Background(), src) client := githubv4.NewClient(httpClient) err := client.Query(context.Background(), &QueryRepositories, nil ) if  err != nil  {	log.Fatal(err) } log.Printf("Repositories TotalCount: %d" , QueryRepositories.Viewer.Repositorys.TotalCount) 
Traverse deal with repos
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 for  items := 0 ; items < int (QueryRepositories.Viewer.Repositorys.TotalCount); items++ {	Repositories := QueryRepositories.Viewer.Repositorys.Nodes[items].Name 	ReposURL := QueryRepositories.Viewer.Repositorys.Nodes[items].URL 	log.Printf("Check: %s ===> %s" , Repositories, ReposURL) 	ReposPath := string (ReposURL[len (bareurl):]) 	 	if  !FileExist(path.Join(Getpath(), ReposPath)) { 		_, err := git.PlainClone(barepath+ReposPath, false , &git.CloneOptions{ 			URL:      string (ReposURL), 			Progress: os.Stdout, 			Auth: &githttp.BasicAuth{ 				Username: user, 				Password: token, 			}, 		}) 		if  err != nil  { 			log.Fatal(err) 			 			 		} 	} else  { 		r, _ := git.PlainOpen(ReposPath) 		w, _ := r.Worktree() 		w.Pull(&git.PullOptions{ 			RemoteName: "origin" , 			Auth: &githttp.BasicAuth{ 				Username: user, 				Password: token, 			}, 		}) 		ref, _ := r.Head() 		commit, _ := r.CommitObject(ref.Hash()) 		log.Printf("Pulling Repository: %s\n%s" , ReposURL, commit) 	} } 
3rd part code
1 2 3 4 5 6 7 8 9 10 11 12 13 func  Getpath ()   string  {	dir, err := filepath.Abs(filepath.Dir(os.Args[0 ])) 	if  err != nil  { 		fmt.Println("error" ) 	} 	return  strings.Replace(dir, "\\" , "/" , -1 ) } func  FileExist (path string )   bool  {	_, err := os.Lstat(path) 	return  !os.IsNotExist(err) } 
Hi there, I’m Mardan(ka1i).