介绍
Netlify是一个专门托管静态文件的云。这使得它非常适合托管开发人员博客、宣传册网站,甚至只是一个个人简历。它甚至内置了对Hugo的支持。但是Netlify也有各种动态托管解决方案,他们的functions
服务是托管Go Web应用程序的一种非常简单的方法,而且通常是免费的。
GitHub:go-netlify-app
实现
假设我们有一个静态HTML网页,但我们希望在页面上有一个动态填充的信息流。例如,网页本身是静态的,但使用JavaScript从API中提取相关链接。这是在不牺牲包含其他内容的能力的情况下为页面保留较长缓存时间的好方法。理想情况下,我们可以自己部署网页,但无需部署一个定期将链接转储到数据库中的爬虫程序。
举个例子,让我们使用知乎热榜,它来自https://www.zhihu.com/api/v3/feed/topstory/hot-lists/total?limit=50&desktop=true
,让后端获取我们需要的信息,通过API提供给静态网页。
Go可以很容易地编写一个将JSON格式内容的URL转换为JSON的服务。
package main
import (
"flag"
"fmt"
"io/ioutil"
"log"
"net/http"
)
var (
port = flag.Int("port", -1, "specify a port")
)
func main() {
flag.Parse()
http.HandleFunc("/api/feed", feed)
log.Fatal(http.ListenAndServe(fmt.Sprintf(":%d", *port), nil))
}
func feed(w http.ResponseWriter, r *http.Request) {
url := "https://www.zhihu.com/api/v3/feed/topstory/hot-lists/total?limit=50&desktop=true"
method := "GET"
client := &http.Client{
}
req, err := http.NewRequest(method, url, nil)
if err != nil {
fmt.Println(err)
return
}
res, err := client.Do(req)
if err != nil {
fmt.Println(err)
return
}
defer res.Body.Close