发布时间:2024-11-05 19:03:57
```go package main import ( "fmt" "net/http" ) func handler(w http.ResponseWriter, r *http.Request) { fmt.Fprintf(w, "Hello, World!") } func main() { http.HandleFunc("/", handler) http.ListenAndServe(":8080", nil) } ```
在上面的代码中,我们创建了一个名为 `handler` 的函数,它接收两个参数,一个是 `http.ResponseWriter`,用于写入响应内容,另一个是 `*http.Request`,用于读取请求信息。 接下来,我们使用 `http.HandleFunc` 函数将 `/` 路径与我们刚刚创建的 `handler` 函数关联起来。然后,我们使用 `http.ListenAndServe` 函数来启动我们的 Web 服务器。 运行以上代码,你将会看到一个简单的 Web 服务器在本地的 8080 端口运行。现在,当你访问 http://localhost:8080 ,你将会看到 "Hello, World!" 字样的响应。```go func handler(w http.ResponseWriter, r *http.Request) { switch r.Method { case "GET": fmt.Fprintf(w, "Hello, GET request!") case "POST": fmt.Fprintf(w, "Hello, POST request!") default: http.Error(w, "Method not allowed", http.StatusMethodNotAllowed) } } ```
在上面的例子中,我们使用 `switch` 条件语句来检查请求的方法类型,并根据不同的方法返回不同的响应。如果请求方法不是 GET 或 POST,我们还可以使用 `http.Error` 函数返回一个自定义的错误消息和状态码。```go func handler1(w http.ResponseWriter, r *http.Request) { fmt.Fprintf(w, "This is handler1") } func handler2(w http.ResponseWriter, r *http.Request) { fmt.Fprintf(w, "This is handler2") } func main() { mux := http.NewServeMux() mux.HandleFunc("/handler1", handler1) mux.HandleFunc("/handler2", handler2) http.ListenAndServe(":8080", mux) } ```
在上面的代码中,我们首先创建了一个 `http.NewServeMux` 实例,用于处理不同的路径。 然后,我们使用 `mux.HandleFunc` 函数将不同路径与不同的处理器函数关联起来。 当我们向服务器发出 `/handler1` 的请求时,会调用 `handler1` 函数并返回消息 "This is handler1";当我们向服务器发出 `/handler2` 的请求时,会调用 `handler2` 函数并返回消息 "This is handler2"。```go func handler(w http.ResponseWriter, r *http.Request) { name := r.URL.Query().Get("name") fmt.Fprintf(w, "Hello, %s!", name) } ```
在上面的代码中,我们使用 `r.URL.Query()` 方法来获取 URL 中的查询字符串,并使用 `Get` 方法获取指定名称的参数值。 当我们向服务器发出 `/hello?name=John` 的请求时,服务器将返回消息 "Hello, John!"。```go type Person struct { Name string `json:"name"` Age int `json:"age"` } func handler(w http.ResponseWriter, r *http.Request) { person := Person{ Name: "John", Age: 25, } jsonData, err := json.Marshal(person) if err != nil { http.Error(w, err.Error(), http.StatusInternalServerError) return } w.Header().Set("Content-Type", "application/json") w.Write(jsonData) } ```
在上面的代码中,我们定义了一个 `Person` 结构体,并将其转换为 JSON 格式的数据。 然后,我们使用 `json.Marshal` 函数将结构体转换为 JSON 数据,并将其发送给客户端。 此外,我们还使用 `w.Header().Set` 方法设置响应头的 Content-Type,将其设置为 "application/json",以告知客户端响应数据的类型。