学习 Go 写了个静态服务器

2016-01-10 19:13:57 +08:00
 linghutf
2946 次点击
所在节点    分享创造
10 条回复
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
2016-01-10 20:35:18 +08:00
@raincious 没有用库方式,差不多是个小工具,方便用而已。主要是为了后续改成自己博客的静态文件服务器的,之后会改进。
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
2016-01-10 23:04:55 +08:00
@raincious 刚刚把博客的静态文件服务写完跑起来了。可以去看一下[blog]( https://linghutf.gitcafe.io),就是服务器地址怎么隐藏还没改,感觉 hexo md 文件中没有模板。
linghutf
2016-01-10 23:07:19 +08:00
Niphor
2016-01-10 23:18:38 +08:00
@raincious 看你的回复比看楼主的代码,学到的还多...

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

http.Write -> fd.Stats -> io.Copy -> file.ReadFrom -> syscall.Syscall -> sendfile

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/249722

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX