go - 将可变数量的 url 映射到 HandleFunc

标签 go

这是我第一次尝试用Go(Golang)写一个小博客。现在,我有一个只有几页的小网站。我的 main 包含这个。

http.HandleFunc("/about", about)
http.HandleFunc("/contact", contact)
http.HandleFunc("/", homepage)
if err := http.ListenAndServe(":8080", nil); err != nil {
    log.Fatalln(err)
}

我的第一个问题是:这叫什么?我将其称为将 URL 映射到函数,但我的 Google 结果并没有包含这些搜索词。这叫“路由”吗?

其次,我的目标是编写一个小型博客应用程序。我想使用数据库来保存博客文章和其他数据。但是,像我上面那样将 URL 映射到函数似乎并不正确,因为在有人发表博客文章之前无法知道 URL 应该是什么。我希望 URL 与博客文章标题相匹配。此外,可能有数百篇博文,因此编写一堆 http.HandleFunc 似乎不合理。

最后,我的问题是:有哪些选项可以解决这个障碍?

最佳答案

“博客应用”的另一种方法是静态网站生成器
您可以在 gohugo 中找到一个很好的例子( repo GitHub ),意思是 you only have one Handler :

if port > 0 {
    if !viper.GetBool("DisableLiveReload") {
        livereload.Initialize()
        http.HandleFunc("/livereload.js", livereload.ServeJS)
        http.HandleFunc("/livereload", livereload.Handler)
    }
    go serve(port)
}

但更一般地说,它被称为路由器,您可以在这个优秀的 Guide to 3rd Party Routers in Go 2014/11/20 中看到它们。 :

关于go - 将可变数量的 url 映射到 HandleFunc,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27180513/

相关文章:

go - 我在 golang 中错误地使用了 channel 吗?

go - sqlx.Connect() 和 sqlx.Open() 有什么区别?

go - make(chan bool) 与 make(chan bool, 1) 的行为有何不同?

performance - 为什么在 Go 中交换 []float64 的元素比在 Rust 中交换 Vec<f64> 的元素更快?

go - 如何修复m [0] == nil {},以便将其计入err

go - 将图像从 *image.YCbCr 转换为 *image.RGBA

json - 从 JSON 反序列化时接口(interface)断言失败

go - unsupportedOutputFormat go drive api sdk v3 无法下载 gdrive 上的文件内容

json - 如何利用encoding/json UnmarshalTypeError 中的偏移值来更好地处理错误?

go - 为什么我的 Go 应用程序没有像 busybox `cat` 命令那样从 sysfs 中读取数据?