How to use Golang functions to handle web request routing

WBOY
Release: 2024-05-02 10:18:01
Original
847 people have browsed it

In Golang, using functions to handle web request routing is an extensible and modular way to build APIs. It involves the following steps: Install the HTTP router library. Create a router. Define path patterns and handler functions for routes. Write handler functions to handle requests and return responses. Run the router using an HTTP server. This process allows for a modular approach when handling incoming requests, thereby improving reusability, maintainability, and testability.

How to use Golang functions to handle web request routing

How to use Golang functions to handle Web request routing

In Golang, using functions to handle Web request routing is a way to build A common way to extend and modularize APIs. This article will show you how to use an HTTP router library (such as github.com/gorilla/mux) to define routes and use handler functions to handle incoming requests.

Step 1: Install the HTTP router library

import "github.com/gorilla/mux"
Copy after login

Step 2: Create a router

router := mux.NewRouter()
Copy after login

Step 3: Define the route

Define the path pattern for the route and specify the processing function used to handle the request. For example:

router.HandleFunc("/users", getUsers).Methods("GET") // GET /users 处理函数
router.HandleFunc("/users/{id}", getUser).Methods("GET") // GET /users/{id} 处理函数
Copy after login

Step 4: Write the processing function

The processing function is a function used to process incoming requests and return responses. The following is an example of a processing function:

func getUsers(w http.ResponseWriter, r *http.Request) {
  // 获取所有用户数据
  users := []User{
    {ID: 1, Name: "John"},
    {ID: 2, Name: "Jane"},
  }

  // 以 JSON 格式编码响应
  json, err := json.Marshal(users)
  if err != nil {
    http.Error(w, err.Error(), http.StatusInternalServerError)
    return
  }

  // 设置响应标头和状态代码
  w.Header().Set("Content-Type", "application/json")
  w.WriteHeader(http.StatusOK)

  // 写入响应主体
  w.Write(json)
}
Copy after login

Step 5: Run the router

Use the HTTP server to start the router, for example:

srv := &http.Server{
  Handler: router,
  Addr:    ":8080",
}

if err := srv.ListenAndServe(); err != nil && err != http.ErrServerClosed {
  log.Fatal(err)
}
Copy after login

Actual combat Case

Create a simple API to manage users:

package main

import (
  "github.com/gorilla/mux"
  "net/http"
)

type User struct {
  ID   int
  Name string
}

var users = []User{
  {1, "John"},
  {2, "Jane"},
}

func main() {
  router := mux.NewRouter()
  router.HandleFunc("/users", Get).Methods("GET")
  router.HandleFunc("/users/{id}", GetByID).Methods("GET")
  srv := &http.Server{
    Handler: router,
    Addr:    ":8080",
  }
  srv.ListenAndServe()
}

func Get(w http.ResponseWriter, r *http.Request) { json.Encode(w, users) }
func GetByID(w http.ResponseWriter, r *http.Request) {
  id := mux.Vars(r)["id"] // 从 URL 中提取参数
  for _, user := range users {
    if user.ID == id {
      json.Encode(w, user)
      return
    }
  }
  http.Error(w, "Not found", http.StatusNotFound)
}
Copy after login

By running this program, you can create a simple API between localhost:8080/users and localhost Obtain and retrieve user information under the path :8080/users/{id}.

The above is the detailed content of How to use Golang functions to handle web request routing. For more information, please follow other related articles on the PHP Chinese website!

Related labels:
source:php.cn
Statement of this Website
The content of this article is voluntarily contributed by netizens, and the copyright belongs to the original author. This site does not assume corresponding legal responsibility. If you find any content suspected of plagiarism or infringement, please contact admin@php.cn
Popular Tutorials
More>
Latest Downloads
More>
Web Effects
Website Source Code
Website Materials
Front End Template
About us Disclaimer Sitemap
php.cn:Public welfare online PHP training,Help PHP learners grow quickly!