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

How to implement progress counter when parsing large XML files in Go/Golang with xml.NewDecoder(xmlFile)?

我按照本网站上的示例编写了一些代码来解析大型 XML 文件 (>3GB):https://blog.singleton.io/posts/2012-06-19-parsing-huge-xml-files-with-go/

想法是创建 decoder := xml.NewDecoder(xmlFile),然后用 decoder.Token() 遍历文件,同时检查所有 xml.StartElement。只要找到正确的元素,就会使用 decoder.DecodeElement().

对其进行解码

一切都很好。

我现在喜欢的是一种向用户显示进度的方法。类似于 "x percent of file processed".

我知道如何获取 XML 的文件大小:How to get file length in Go?

但是我怎样才能得到decoder.Token()的实际(或相对)位置呢?

xml.Decoder 有方法 InputOffset,即 return 当前位置。您还需要其他东西吗?