华域联盟 Golang golang实现http服务器处理静态文件示例

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实现http服务器处理静态文件示例

转载请保留出处和原文链接:https://www.cnhackhy.com/110117.htm

本文来自网络,不代表华域联盟立场,转载请注明出处。

作者: sterben

发表回复

联系我们

联系我们

2551209778

在线咨询: QQ交谈

邮箱: [email protected]

工作时间:周一至周五,9:00-17:30,节假日休息

关注微信
微信扫一扫关注我们

微信扫一扫关注我们