Rumah >pembangunan bahagian belakang >Golang >Aplikasi fungsi Golang dalam memproses cangkuk web
Cara menggunakan fungsi untuk mengendalikan Webhooks dalam Go: Gunakan func untuk mengisytiharkan fungsi untuk mengendalikan permintaan HTTP. Parsing badan permintaan, sahkan tandatangan atau token, dan cetuskan logik pemprosesan yang sepadan. Ia boleh digunakan sebagai kes praktikal untuk memproses Github Webhook, menggunakan API Webhook Github untuk mencetuskan logik pemprosesan yang berbeza apabila peristiwa tertentu berlaku, seperti memproses Permintaan Tarik atau peristiwa Tekan.
Gunakan fungsi untuk mengendalikan webhooks dalam Go
Menggunakan fungsi dalam Go ialah cara yang cekap dan ringan untuk mengendalikan webhooks. Webhooks ialah mekanisme panggil balik HTTP yang membenarkan aplikasi pihak ketiga menerima pemberitahuan apabila peristiwa tertentu berlaku.
Pengisytiharan fungsi
Takrifan fungsi dalam Go menggunakan kata kunci func
, diikuti dengan nama fungsi dan senarai parameter:
func handleWebhook(w http.ResponseWriter, r *http.Request) { // 根据 Webhook 内容处理逻辑... }
Pemprosesan acara
Proses asas memproses acara Webhook termasuk:
badan permintaan.Github menyediakan API Webhook untuk menghantar pemberitahuan apabila peristiwa berlaku dalam repositori kod (seperti menolak ke cawangan induk). Dalam Go, kita boleh menggunakan kod berikut untuk mengendalikan Github Webhooks:
import ( "encoding/json" "fmt" "github.com/google/go-github/github" "github.com/google/go-github/v32/github/apps" "net/http" ) // GithubWebhookHandler 处理 Github Webhook 请求。 func GithubWebhookHandler(w http.ResponseWriter, r *http.Request) { if r.Method != "POST" { http.Error(w, "Invalid request method", 405) return } webhookID := r.Header.Get("X-Github-Delivery") msg, err := github.ValidatePayload(r, []byte(webhookSecret)) if err != nil { http.Error(w, fmt.Sprintf("Validation failed: %s", err), 401) return } var event github.WebhookEvent if err := json.Unmarshal(msg, &event); err != nil { http.Error(w, fmt.Sprintf("Unmarshaling failed: %s", err), 400) return } switch event.Type { case "pull_request": handlePullRequestEvent(&event, w) case "push": handlePushEvent(&event, w) default: fmt.Fprintf(w, "Received webhook event of type %s", event.Type) } } // handlePullRequestEvent 处理 pull_request Webhook 事件。 func handlePullRequestEvent(event *github.WebhookEvent, w http.ResponseWriter) { if e, ok := event.Payload.(*github.PullRequestEvent); ok { if *e.Action == "closed" { if e.PullRequest.Merged != nil && *e.PullRequest.Merged { fmt.Fprintf(w, "Pull request %d was merged.", *e.Number) } else { fmt.Fprintf(w, "Pull request %d was closed.", *e.Number) } } } } // handlePushEvent 处理 push Webhook 事件。 func handlePushEvent(event *github.WebhookEvent, w http.ResponseWriter) { if e, ok := event.Payload.(*github.PushEvent); ok { fmt.Fprintf(w, "Push event received: %+v", e) } }
Atas ialah kandungan terperinci Aplikasi fungsi Golang dalam memproses cangkuk web. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!