在使用XML.NewDecoder(xmlFile)解析Go/Golang中的大型XML文件时,如何实现进度计数器?

在使用XML.NewDecoder(xmlFile)解析Go/Golang中的大型XML文件时,如何实现进度计数器?,go,xml-parsing,tokenize,large-files,Go,Xml Parsing,Tokenize,Large Files,我编写了一些代码来解析go中大于3GB的大型XML文件,如下所示: 其思想是创建decoder:=xml.NewDecoderxmlFile,然后使用decoder.Token迭代该文件,同时检查所有xml.StartElement。只要找到正确的元素,就会使用decoder.DecodeElement对其进行解码 这一切都很好 我现在想要的是一个向用户显示进度的方法。大约x%的文件已处理 我知道如何获取XML的文件大小: 但是如何才能得到decoder.Token的实际位置或相对位置?xml.

我编写了一些代码来解析go中大于3GB的大型XML文件,如下所示:

其思想是创建decoder:=xml.NewDecoderxmlFile,然后使用decoder.Token迭代该文件,同时检查所有xml.StartElement。只要找到正确的元素,就会使用decoder.DecodeElement对其进行解码

这一切都很好

我现在想要的是一个向用户显示进度的方法。大约x%的文件已处理

我知道如何获取XML的文件大小:


但是如何才能得到decoder.Token的实际位置或相对位置?

xml.decoder有返回当前位置的方法InputOffset。您还需要什么吗?

xml.Decoder只是包装了一个io.Reader。你可以把你自己的阅读器放在这两者之间,在它们经过的时候计算字节数。你可能也会发现这很有用,我从来没有使用过它,但它看起来与你的需要相关:非常感谢,到现在为止,我用ioprogress创建了一个版本,之后我发现它更通用,甚至可以通过通道提供剩余的时间加触发。这是一个简单的答案。我怎么会错过呢。