作为评估项目的一部分,我正在将现有的 C++ 应用程序移植到 GO。作为其中的一部分,我需要读取两个数据集属性,这些属性在一些文件中存储为双精度,在一些文件中存储为浮点数。我用来处理这个问题的 C++ 代码如下所示(我们在 Debian Linux 上使用 libhdf5-cpp-100)。
const auto att = dataSet.openAttribute(attributeName);
if (att.getDataType() == H5::PredType::NATIVE_DOUBLE) {
att.read(att.getDataType(), &attributeValue);
}
else if (att.getDataType() == H5::PredType::NATIVE_FLOAT) {
float temp = 0.F;
att.read(att.getDataType(), &temp);
attributeValue = static_cast<double>(temp);
}
else {
// we throw an exception indicating we don't support the type
}
我的问题是我无法在 GO 中编写等效项。(我正在使用包“gonum.org/v1/hdf5”。)读取方法似乎很简单:
func (s *Attribute) Read(data interface{}, dtype *Datatype) error
但是我正在努力确定要传递什么作为数据类型,因为属性类型似乎没有 GetDataType 方法。我看到的最接近的是:
func (s *Attribute) GetType() Identifier
但这不返回数据类型,它返回一个标识符。我在假设给定标识符我可以确定数据类型的情况下尝试了以下比较:
if attr.GetType().ID() == hdf5.T_NATIVE_DOUBLE.ID() {
// handle as a double
}
但这是行不通的。从 GetType() 返回的 ID 与双精度型或浮点型的 ID 不同。
我已经浏览过在线文档,https://godoc.org/gonum.org/v1/hdf5但无法找到解决我的问题的方法。(或使用 GO 读取 HDF5 属性的任何示例。)
有没有人设法做这样的事情?还是大多数示例只是假定类型而不是查询类型?
慕的地8271018
相关分类