Go 语言初学实践(3)

2011-03-10 12:18

Go 语言初学实践(3)

by 云风

at 2011-03-10 04:18:40

original http://blog.codingnow.com/2011/03/go_3.html

这几天一直在写个小东西,基本也做完了。抽点时间贴段代码继续这个系列。

我写的 http server 在支持断点续传时碰到个小的算法问题。就是我希望用户在完整下载完一次指定文件后,就让这个文件 URL 失效。而如果用户不断的从中间开始分段下载的话,很难从统计下载字节数来判定整个文件是否下载完一次。

我希望把下载完一次的标准定为,文件的每个字节都至少被请求一次。这个问题用线段树来实现最为贴切。当然还会有各种其它方案,就不展开讨论了。

这里的代码有很大的优化余地,但是就具体应用来说,性能方面也足够了。严谨点来说,我在服务器上额外增加了一些判断,防止被恶意攻击。比如如果分段太多(恶意的每间隔一个字节请求一个字节)对于大文件会导致这个数据结构占据过多内存。这时直接掐断服务即可,这里不展开讨论。

    <p>今天贴的代码和 C 很接近。没什么特别有特色的地方。不过,Go 的 Slice 的确很好用,还有 Built-in 的函数 copy ,这些都使得 Go 比 C 在处理数据块上更方便和安全。</p>

代码在这里。暂时 Blog 系统没支持 Go ,所以换个位置贴了。


btw, 受周爱民同学邀请,明天我将去支付宝给那里的同学介绍一下 Go 语言。我自己也是初学乍练 。最近多用 Go 写点小程序,也是为了稍微熟悉一点。希望明天不要让人太失望了。