douhao2153 2014-07-02 10:31
浏览 136

Golang-通过API从Gitlab复制值

Now... I want to copy the "Commits" from Gitlab in my own written program (I am a student).

I have wrote this:

 package main

import (
                                                                                            "encoding/json"
"fmt"       
"github.com/gorilla/mux"                                
"html/template" 
"log"       
"net/http"  
"os"        
)

type Project struct  {                      
    Idint64`json:"project_id"`  
    Titel string `json:"title"` 
    Name string `json:"name"`
    Data Data `json:"data"`
    Commits Commits`json:"commits"`
}

type Data struct {
    Id int64 `json:"user_id"`
    Username string `json:"user_name"`  
}

type Commits struct {
    Id string `json:"id"`
    Message string `json:"message"`
}

func SetupRouter() http.Handler {                           
    r := mux.NewRouter()
    r.HandleFunc("/", Home).Methods("GET")
    r.HandleFunc("/projects", Projects).Methods("GET")

    return r                    
}

func main()  {  
    port := os.Getenv("PORT")
    if port == "" {
    port = "3000"
}

    r := SetupRouter()
    http.ListenAndServe(":" + port, r)                      
    log.Fatalln(http.ListenAndServe(":"+port, r))           
}

func Home(rw http.ResponseWriter, req *http.Request) {      
    rw.Header().Set("Content-Type", "application/json")     
    fmt.Fprint(rw, "{\"hello:\"\"world\"}")                 
}

func Projects(rw http.ResponseWriter, req *http.Request) {  
    resp, err := http.Get("https://gitlab.nolteundlauth.de/api/v3/projects/44/events?private_token=*XXXXXXXXXXXXXXX*")      
    if err != nil   {
    fmt.Println("Error: " + err.Error())                    
return  
    }
    defer resp.Body.Close()

var projects []Project
dec := json.NewDecoder(resp.Body)                       
err = dec.Decode(&projects)                             
if err != nil  {
    fmt.Println("Error parsing json")                       
} 

tmpl, _ := template.ParseFiles("projects.tpl")          
tmpl.Execute(rw, projects)
}

And my template file:

<html>
<body>
<h1>Commits</h1>  
{{range .}}
{{.Id}} {{.Name}} ({{.Data.Id}}) ({{.Data.Username}}) ({{.Commits.Id}}) ({{.Commits.Message}}) <br>
{{end}}
</body>
</html>

And the API for this commits from Gitlab is:

    "commits": [{
  "id": "c5feabde2d8cd023215af4d2ceeb7a64839fc428",
  "message": "Add simple search to projects in public area",
  "timestamp": "2013-05-13T18:18:08+00:00",
  "url": "https://dev.gitlab.org/gitlab/gitlabhq/commit/c5feabde2d8cd023215af4d2ceeb7a64839fc428",
  "author": {
    "name": "Dmitriy Zaporozhets",
    "email": "dmitriy.zaporozhets@gmail.com"
  }
}],

Source for API

When I start the server I get every value from structvariables except the commits. Why?

  • 写回答

0条回答 默认 最新

    报告相同问题?

    悬赏问题

    • ¥15 对于相关问题的求解与代码
    • ¥15 ubuntu子系统密码忘记
    • ¥15 信号傅里叶变换在matlab上遇到的小问题请求帮助
    • ¥15 保护模式-系统加载-段寄存器
    • ¥15 电脑桌面设定一个区域禁止鼠标操作
    • ¥15 求NPF226060磁芯的详细资料
    • ¥15 使用R语言marginaleffects包进行边际效应图绘制
    • ¥20 usb设备兼容性问题
    • ¥15 错误(10048): “调用exui内部功能”库命令的参数“参数4”不能接受空数据。怎么解决啊
    • ¥15 安装svn网络有问题怎么办