使用Golang搭建WEB后端服务,从类型上看需要提供两种类型的请求响应服务,一是提供API请求服务,二是提供给前端对静态资源的访问。静态资源包含网页中用到的图片、js脚本和css样式文件。如在网页中引用的js文件,在网页解析时会向后端请求该js文件,后端必须有相应的服务来返回js文件到前端。

后端目录结构

static内包含两个静态资源文件夹 js 、css

首页 index.html

<!doctype html>
<html lang="zh">

<head>
    <meta charset="utf-8" />
    <meta name="viewport" content="width=device-width,initial-scale=1" />
    <meta name="theme-color" content="#000000" />
    <meta name="description" content="Web site created using create-react-app" />
    <title>My App</title>
    <script defer="defer" src="/static/js/main.c2c1cea9.js"></script>
    <link href="/static/css/main.ec1cd5c0.css" rel="stylesheet">
</head>

<body>
    <div id="root" style="height:100%"></div>
</body>

</html>

后端WEB服务

package main

import (
	"demo/db"
	"demo/handler"
	"fmt"
	"log"
	"net/http"
	"time"

	"github.com/gorilla/mux"
)


func StaticServer(w http.ResponseWriter, r *http.Request) {
	http.ServeFile(w, r, "./"+r.URL.Path)
}

func main() {

	router := mux.NewRouter()
	//当前端访问:http://127.0.0.1:8000/ 地址时返回当前目录下的 index.html
	router.HandleFunc("/", StaticServer)
	//当前端访问路径前缀为 /static/js/ 时返回访问地址指向的js文件内容
	//当网页解析到 <script defer="defer" src="/static/js/main.c2c1cea9.js"></script> 时会执行
	router.PathPrefix("/static/js/").HandlerFunc(StaticServer)
	//当前端访问路径前缀为 /static/css/ 时返回访问地址指向的css文件内容
	router.PathPrefix("/static/css/").HandlerFunc(StaticServer)


	srv := &http.Server{
		Handler: router,
		Addr:    "127.0.0.1:8000",
		WriteTimeout: 15 * time.Second,
		ReadTimeout:  15 * time.Second,
	}

	log.Fatal(srv.ListenAndServe())
}