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)

}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值