golang文件服务器的两种方式(可以访问任何目录)

 更新时间:2020年04月26日 16:18:36   作者:lxsky  
这篇文章主要介绍了golang文件服务器的两种方式,可以访问任何目录,本文通过实例代码给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友可以参考下

一、方法1:

主要用到的方法是http包的FileServer,参数很简单,就是要路由的文件夹的路径。

package main

import (
  "fmt"
  "net/http"
)

func main() {
  http.Handle("/", http.FileServer(http.Dir("./")))

  e := http.ListenAndServe(":8080", nil)
  fmt.Println(e)
}

上面例子的路由只能把根目录也就是“/”目录映射出来,例如你写成”http.Handle("/files", http.FileServer(http.Dir("./")))“,就无法把通过访问”/files“把当前路径下的文件映射出来。于是就有了http包的StripPrefix方法。

二、方法2:

实现访问任意文件夹下面的文件。

package main

import (
  "fmt"
  "net/http"
)

func main() {
  mux := http.NewServeMux()
  mux.Handle("/", http.StripPrefix("/", http.FileServer(http.Dir("/"))))
  mux.Handle("/c/", http.StripPrefix("/c/", http.FileServer(http.Dir("c:"))))
  mux.Handle("/d/", http.StripPrefix("/d/", http.FileServer(http.Dir("d:"))))
  mux.Handle("/e/", http.StripPrefix("/e/", http.FileServer(http.Dir("e:"))))
  if err := http.ListenAndServe(":3008", mux); err != nil {
    log.Fatal(err)
  }
}

这里生成了一个ServeMux,与文件服务器无关,可以先不用关注。用这种方式,就可以把任意文件夹下的文件路由出来了。

ps:golang实现的文件服务器

最近在学习golang,使用golang实现了一个最简单的文件服务器,程序只有简单的十多行代码,可以编译成windows, linux, mac多平台可执行文件。

源码

package main

import (
 "fmt"
 "net/http"
 "os"
 "path/filepath"
)

func main() {
 p, _ := filepath.Abs(filepath.Dir(os.Args[0]))
 http.Handle("/", http.FileServer(http.Dir(p)))
 err := http.ListenAndServe(":8088", nil)
 if err != nil {
 fmt.Println(err)
 }
}

源码解释

os.Args[0]获取的是执行程序时的第一个参数,默认第一个参数是程序所在的目录
filepath.Abs(filepath.Dir(os.Args[0]))是获取当前可执行程序所在的绝对路径
http.Handle("/", http.FileServer(http.Dir(p)))是开启一个文件服务器,使用当前可执行文件所在的路径
http.ListenAndServe(":8088", nil)是监听8088端口并开启文件服务器

编译

要将源码编译成不同平台的可执行文件,需要使用gox工具,使用下面的命令安装gox:

go get github.com/mitchellh/gox

执行成功之后,使用gox命令即可自动编译出各个平台的可执行文件,如果想为某个平台单独编译,可以使用如下方式:

gox -os "windows linux" -arch amd64

-os参数指定了编译平台,-arch参数指定了处理器架构

运行

直接打开编译出来的可执行程序,即可运行,在浏览器中访问http://ip:8088即可看到可执行文件所在的目录下的所有文件。

到此这篇关于golang文件服务器可以访问任何目录的文章就介绍到这了,更多相关golang文件服务器内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!

相关文章

  • Golang websocket协议使用浅析

    Golang websocket协议使用浅析

    这篇文章主要介绍了Golang websocket协议的使用,WebSocket是一种新型的网络通信协议,可以在Web应用程序中实现双向通信,感兴趣想要详细了解可以参考下文
    2023-05-05
  • Go基础教程系列之Go接口使用详解

    Go基础教程系列之Go接口使用详解

    这篇文章主要介绍了Go基础教程系列之Go接口使用详解,需要的朋友可以参考下
    2022-04-04
  • GoLang BoltDB数据库详解

    GoLang BoltDB数据库详解

    这篇文章主要介绍了GoLang BoltDB数据库,boltdb是使用Go语言编写的开源的键值对数据库,boltdb存储数据时 key和value都要求是字节数据,此处需要使用到 序列化和反序列化
    2023-02-02
  • Golang泛型的使用方法详解

    Golang泛型的使用方法详解

    这篇文章主要介绍了Golang中泛型的使用,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2022-06-06
  • glow工具在命令行读取Markdown好物分享

    glow工具在命令行读取Markdown好物分享

    这篇文章主要为大家介绍了一款实用的命令行工具glow,这个CLI工具可以在命令行读取Markdown,这对于码农来说非常友好,使用起来也非常舒爽
    2022-07-07
  • GoLand 使用自定义包的实现步骤

    GoLand 使用自定义包的实现步骤

    包是Go语言中代码组成和代码编译的主要方式,本文主要介绍了GoLand 使用自定义包的实现步骤,具有一定的参考价值,感兴趣的可以了解一下
    2024-06-06
  • 谈论Go 什么时候会触发 GC问题

    谈论Go 什么时候会触发 GC问题

    Go 语言作为一门新语言,在早期经常遭到唾弃的就是在垃圾回收(下称:GC)机制中 STW(Stop-The-World)的时间过长。下面文章就对此话题展开,感兴趣的小伙伴可以参考下面文章的内容
    2021-09-09
  • 浅析goland等待锁问题

    浅析goland等待锁问题

    这篇文章主要介绍了goland等待锁问题,本文给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友参考下吧
    2020-11-11
  • Golang线上内存爆掉问题排查(pprof)与解决

    Golang线上内存爆掉问题排查(pprof)与解决

    这篇文章主要介绍了Golang线上内存爆掉问题排查(pprof)与解决,涉及到数据敏感,文中代码是我模拟线上故障的一个情况,好在我们程序都有添加pprof监控,于是直接通过go tool pprof分析,需要的朋友可以参考下
    2024-04-04
  • golang实现数组分割的示例代码

    golang实现数组分割的示例代码

    本文主要介绍了golang实现数组分割的示例代码,要求把数组分割成多个正整数大小的数组,文中通过示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2021-12-12

最新评论