我正在试图找出最好的方法来处理/个请求,而在围棋中只有/个请求,并以不同的方式处理不同的方法.以下是我想出的最好的:

package main

import (
    "fmt"
    "html"
    "log"
    "net/http"
)

func main() {
    http.HandleFunc("/", func(w http.ResponseWriter, r *http.Request) {
        if r.URL.Path != "/" {
            http.NotFound(w, r)
            return
        }

        if r.Method == "GET" {
            fmt.Fprintf(w, "GET, %q", html.EscapeString(r.URL.Path))
        } else if r.Method == "POST" {
            fmt.Fprintf(w, "POST, %q", html.EscapeString(r.URL.Path))
        } else {
            http.Error(w, "Invalid request method.", 405)
        }
    })

    log.Fatal(http.ListenAndServe(":8080", nil))
}

这是惯用语围棋吗?这是我使用标准http库所能做的最好的事情吗?我更愿意做一些像http.HandleGet("/", handler)这样的事情,比如express 或辛纳特拉.有没有一个很好的框架来编写简单的睡觉服务?web.go看起来很吸引人,但似乎停滞不前.

谢谢你的建议.

推荐答案

确保你只为根服务:你做了正确的事情.在某些情况下,您可能希望调用http的ServeHttp方法.文件服务器对象,而不是调用NotFound;这取决于你是否也有其他想要提供服务的文件.

要以不同的方式处理不同的方法:我的许多HTTP处理程序只包含如下的switch语句:

switch r.Method {
case http.MethodGet:
    // Serve the resource.
case http.MethodPost:
    // Create a new record.
case http.MethodPut:
    // Update an existing record.
case http.MethodDelete:
    // Remove the record.
default:
    http.Error(w, "Method not allowed", http.StatusMethodNotAllowed)
}

当然,你可能会发现像大猩猩这样的第三方套餐更适合你.

Go相关问答推荐

AWS S3 SelectObjectContent在AWS SDK v2 for Go中不返回结果

如何描述OpenAPI规范中围棋的数据类型.JSON?

在不耗尽资源的情况下处理S3文件下载

如何在gofr发起的服务间调用请求中添加Authorization Header?

MaybeReadByte对通道的使用如何在Go中提供随机行为?

为什么 Go 对于长度为 100k 的切片使用的内存比长度为 100k 的数组要少?

如何创建在responseWriter.Write 上返回错误的http.ResponseWriter 模拟实例?

正则表达式模式,确保至少一个字符与其他条件一起存在

Go Build删除信息

此 Golang 程序中的同步问题

Golang 创建一个带有处理程序的模拟数据库并使用接口调用数据库

具有两个参数的动态规划:天数和优惠券

使用图像解码 JPEG 时 colored颜色 不正确.解码并写入 PDF?

try 运行 docker-compose up -d 时出现错误

Golang SSH客户端错误无法验证,try 的方法[无公钥],没有支持的方法

golang 如何从字符串中查找表情符号?

如何在测试中传递用户名和密码等参数

退格字符在围棋操场中不起作用

行之间的模板交替设计

在 VSCode 中使用命令行参数调试 Go 测试