V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
爱意满满的作品展示区。
linghutf
V2EX  ›  分享创造

学习 Go 写了个静态服务器

  •  
  •   linghutf ·
    linghutf · 2016-01-10 19:13:57 +08:00 · 2938 次点击
    这是一个创建于 3227 天前的主题,其中的信息可能已经有所发展或是发生改变。
    • 看到别人把一个静态服务器都上传到 github 了,之前我也做过方便 WIFI 下手机下载电脑中的文件服务工具,现在抽空上传了,附使用方法。
    • 其实主要是在电脑开 wifi 情况下手机传文件。
    • python2 自带的 SimpleHTTPServer 乱码不说,估计是编码问题,只能单个下载,还经常长时间无速度。 python3 没试过。
    • 有需要请访问fileserv
    • 话说 golang http 这块做的挺简洁的,可以去试试。
    10 条回复    2016-01-11 10:49:32 +08:00
    raincious
        1
    raincious  
       2016-01-10 20:00:40 +08:00
    不是很懂 Golang ,但貌似还可以优化:

    0 、其实我觉得这种项目太小,没必要弄个仓库出来吧?随时用随时写就行了,再不羁可以放 Gist 。建议有空再实现个上传功能,这样意义就大了。
    1 、`fmt.Printf("Listening is on` …… 放在 Routine 里是基于什么考虑?直接打印出来然后继续执行貌似效果差不太大(对这个功能来说);
    2 、`ListenAndServe`最好做一下检查,因为 Port 很有可能会有听失败的情况;
    3 、 Shutdown 流程不优雅,最好是拦截系统信号之后自己组织关闭流程(虽然这里问题不大);
    4 、`ListenAndServe`后面有空行。
    linghutf
        2
    linghutf  
    OP
       2016-01-10 20:35:18 +08:00
    @raincious 没有用库方式,差不多是个小工具,方便用而已。主要是为了后续改成自己博客的静态文件服务器的,之后会改进。
    raincious
        3
    raincious  
       2016-01-10 21:34:28 +08:00
    @linghutf

    要点还是太小了,一行就能实现:
    https://github.com/golang/go/wiki/HttpStaticFiles

    或许得等你做成 Blog 之后才能看到价值。

    另外,`socket_str := ip_str + ":" + strconv.Itoa(*port)` 不要自己拼,用 net.JoinHostPort 可以兼容 Common Name 、 IPv4 和 IPv6 :
    https://golang.org/pkg/net/#JoinHostPort
    linghutf
        4
    linghutf  
    OP
       2016-01-10 23:04:55 +08:00 via Android
    @raincious 刚刚把博客的静态文件服务写完跑起来了。可以去看一下[blog]( https://linghutf.gitcafe.io),就是服务器地址怎么隐藏还没改,感觉 hexo md 文件中没有模板。
    linghutf
        5
    linghutf  
    OP
       2016-01-10 23:07:19 +08:00
    Niphor
        6
    Niphor  
       2016-01-10 23:18:38 +08:00
    @raincious 看你的回复比看楼主的代码,学到的还多...

    @linghutf 这 title 取得有点太大了...
    mengzhuo
        7
    mengzhuo  
       2016-01-11 09:04:46 +08:00 via iPhone
    …这一行就搞定的事
    楼主至少打包三大平台,才算随时用
    linghutf
        8
    linghutf  
    OP
       2016-01-11 10:32:43 +08:00 via Android
    @mengzhuo mac 下的没弄,因为我自己的电脑没开,这只是在实验室写的
    linghutf
        9
    linghutf  
    OP
       2016-01-11 10:34:52 +08:00 via Android
    @Niphor 之后可以更新嘛,主要是写自己博客的文件服务器时想到的,就这样写了
    mengzhuo
        10
    mengzhuo  
       2016-01-11 10:49:32 +08:00
    @Niphor 真要学,还可以看 Fileserver 里的代码,特别美,那种上层统一,底层接口自适应的美

    http.Write -> fd.Stats -> io.Copy -> file.ReadFrom -> syscall.Syscall -> sendfile
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   实用小工具   ·   940 人在线   最高记录 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 22ms · UTC 19:50 · PVG 03:50 · LAX 11:50 · JFK 14:50
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.