玉溪住房和城乡建设局网站,wordpress首页导航设置,wordpress数据库修改登陆密码忘记,网站建设企业站模板每当我们在使用类似 io.Copy 和 ioutil.ReadAll 的工具时#xff0c;比如我们正在从 http.Response 主体读入或者上传一个文件#xff0c;我们会发现这些方法将一直堵塞#xff0c;直到整个过程完成#xff0c;哪怕耗时数十分钟甚至是小时——而且我们没有办法来查看进度比如我们正在从 http.Response 主体读入或者上传一个文件我们会发现这些方法将一直堵塞直到整个过程完成哪怕耗时数十分钟甚至是小时——而且我们没有办法来查看进度以及计算出完成所需剩余时间的估测值。本文很长不想深究瞅这里这篇文章最终导向 progress 包你可以在自己的项目中自由使用——https://github.com/machinebox/progress考虑到 io.Reader 和 io.Writer 都是接口我们可以封装它们并且拦截 Read 和 Write 方法捕获实际已经通过它们的字节数。通过一些简单的数学计算我们可以计算出已完成部分所占的比例。再多上一点数学计算我们甚至可以估测整个过程还剩余多少时间假设传输流是相对一致的话。封装 Reader一个新的 Reader 类型只需要包含另一个 io.Reader , 并且调用它的 Read 方法来获取返回前读到的字节数。为了保证 reader 可以在并发环境中安全使用(在这个例子中至关重要)我们可以使用 atomic.AddInt64 作为安全的计数器。试试看你能不在自己写出 Writer 的计数部分两者很类似。由于方法 N 返回( 基于 atomic.LoadInt64 的安全调用)读取到的字节数我们能在任意时刻使用另一个 goroutine 调用它从而获取当前状况。获取总共的字节数为了计算百分比我们需要知道总数是多少——我们预期读取多少字节上传文件时我们能够利用操作系统获取文件大小。在 HTTP 环境中你可以借助下面这些代码来获取 Content-Length 报头值。如果 Content-Length 报头是空的(这有可能)那么就无法判断进度或者估计剩余时间。在其他状况下你也会需要弄清楚如何获取字节总数。计算百分比现在我们可以计算已经被处理的字节数所占百分比我们需要把值转换为 float64 从而避免早期的向下取整。如果需要整数级精度的话我们依然可以把结果向下取整。估算剩余时间有一个非常简单的方法求出读取 X 字节所需时间然后乘以剩余的字节数。举个例子如果耗时 10 秒完成了 50% 的操作那么就可以假设仍需要 10 秒来完成整个任务总耗时 20 秒。这并不绝对精确但大多时候都可以给出一个可采用的倒计时。代码就在下面但不需要担心你可能理解不了 —— 阅读我们的 package 下面的详细信息可以帮到你。ratio — 已经完成字节数所占的百分比past — 从开始到现在的耗时total — 基于已完成的百分比 ratio 和相应耗费的时间从而得出的预计总耗时estimated — 预测的结束时间点duration — 预测距离完成还需要耗费的时间浏览 progess 包我们热爱开源所以我们封装了所有代码到一个 package 中以方便您的使用。它也支持 io.EOF 和其他你知道的可能会在操作时发生的错误。小助手我们还添加了一个小助手它可以给你一个进度上的 go channel 来周期性报告。 你可以开启一个新的 goroutine 并打印进度或更新进度这取决于您的用例。该 channel 会周期性的返回一个 Progress 结构体该结构体有下列几个方法帮助你了解细节。Percent — 获取操作完成的百分比Estimated — time.Time 表示预期操作结束的时间点Remaining — 一个 time.Duration 变量标识剩余时间channel 会在几种情况下被关闭例如操作已完成或者操作被取消。点击文档 可以获取 API 的最新详细目录示例我们创建了一个 example file downloader 来演示该 package 如何使用。还有什么请尝试我们的开源项目提出问题报告议题提交重要的 PR 。什么是 Machine Box Machine Box 把先进的机器学习技术放到 Docker 容器中以便让开发人员可以更轻松的集成自然语言处理面部检测对象识别等技术到你自己的应用中。该技术是按比例构建所以当你的应用扩大时只需要添加更多同级的 box 。噢而且它比云服务廉价的多(可能还会更好)……而且你的数据也不会离开你自己的基础设备。玩一玩 , 并且请告知我们您宝贵的意见。