发布于 2016-08-04 01:07:46 | 242 次阅读 | 评论: 0 | 来源: 网友投递

这里有新鲜出炉的GO语言教程,程序狗速度看过来!

Go语言

Go是一种新的语言,一种并发的、带垃圾回收的、快速编译的语言。Go是谷歌2009年发布的第二款编程语言。2009年7月份,谷歌曾发布了Simple语言,它是用来开发Android应用的一种BASIC语言。


这篇文章主要介绍了golang实现http服务器处理静态文件的方法,涉及Go语言基于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语言程序设计有所帮助。



最新网友评论  共有(0)条评论 发布评论 返回顶部

Copyright © 2007-2017 PHPERZ.COM All Rights Reserved   冀ICP备14009818号  版权声明  广告服务