• 企业400电话
  • 微网小程序
  • AI电话机器人
  • 电商代运营
  • 全 部 栏 目

    企业400电话 网络优化推广 AI电话机器人 呼叫中心 网站建设 商标✡知产 微网小程序 电商运营 彩铃•短信 增值拓展业务
    golang实现http服务器处理静态文件示例

    本文实例讲述了golang实现http服务器处理静态文件的方法。分享给大家供大家参考,具体如下:

    新版本更精简:

    复制代码 代码如下:
    package main
    import (
        "flag"
        "log"
        "net/http"
        "os"
        "io"
        "path"
        "strconv"
    )
    var dir string
    var port int
    var staticHandler http.Handler
    // 初始化参数
    func init() {
        dir = path.Dir(os.Args[0])
        flag.IntVar(port, "port", 80, "服务器端口")
        flag.Parse()
        staticHandler = http.FileServer(http.Dir(dir))
    }
    func main() {
        http.HandleFunc("/", StaticServer)
        err := http.ListenAndServe(":"+strconv.Itoa(port), nil)
        if err != nil {
            log.Fatal("ListenAndServe: ", err)
        }
    }
    // 静态文件处理
    func StaticServer(w http.ResponseWriter, req *http.Request) {
        if req.URL.Path != "/" {
            staticHandler.ServeHTTP(w, req)
            return
        }
        io.WriteString(w, "hello, world!\n")
    }

    老版本:

    复制代码 代码如下:
    package main
    import (
        "flag"
        "log"
        "net/http"
        "os"
        "path"
        "strconv"
    )
    var dir string
    var port int
    var indexs []string
    // 初始化参数
    func init() {
        dir = path.Dir(os.Args[0])
        flag.IntVar(port, "port", 80, "服务器端口")
        flag.Parse()
        indexs = []string{"index.html", "index.htm"}
    }
    func main() {
        http.HandleFunc("/", StaticServer)
        err := http.ListenAndServe(":"+strconv.Itoa(port), nil)
        if err != nil {
            log.Fatal("ListenAndServe: ", err)
        }
    }
    // 静态文件处理
    func StaticServer(w http.ResponseWriter, req *http.Request) {
        file := dir + req.URL.Path
        fi, err := os.Stat(file)
        if os.IsNotExist(err) {
            http.NotFound(w, req)
            return
        }
        if err != nil {
            http.Error(w, err.Error(), 500)
            return
        }
        if fi.IsDir() {
            if req.URL.Path[len(req.URL.Path)-1] != '/' {
                http.Redirect(w, req, req.URL.Path+"/", 301)
                return
            }
            for _, index := range indexs {
                fi, err = os.Stat(file + index)
                if err != nil {
                    continue
                }
                http.ServeFile(w, req, file+index)
                return
            }
            http.NotFound(w, req)
            return
        }
        http.ServeFile(w, req, file)
    }

    希望本文所述对大家Go语言程序设计有所帮助。

    您可能感兴趣的文章:
    • golang实现页面静态化操作的示例代码
    • golang搭建静态web服务器的实现方法
    • golang一些常用的静态检查工具详解
    上一篇:golang简单位运算示例
    下一篇:golang模板template自定义函数用法示例
  • 相关文章
  • 

    © 2016-2020 巨人网络通讯 版权所有

    《增值电信业务经营许可证》 苏ICP备15040257号-8

    golang实现http服务器处理静态文件示例 golang,实现,http,服务器,处理,