go - 用struct读取二进制文件

时间:2017-02-25 23:27:29

标签: file go struct binary

我正在尝试使用golang读取二进制文件,但有一个问题。

如果我这样读,一切都会好的

package main

import (
    "encoding/binary"
    "fmt"
    "os"
)

type Header struct {
    str1 int32
    str2 [255]byte
    str3 float64
}

func main() {

    path := "test.BIN"

    file, _ := os.Open(path)

    defer file.Close()

    thing := Header{}
    binary.Read(file, binary.LittleEndian, &thing.str1)
    binary.Read(file, binary.LittleEndian, &thing.str2)
    binary.Read(file, binary.LittleEndian, &thing.str3)

    fmt.Println(thing)
}

但是如果我将.Read-Section优化为

binary.Read(file, binary.LittleEndian, &thing)
//binary.Read(file, binary.LittleEndian, &thing.str1)
//binary.Read(file, binary.LittleEndian, &thing.str2)
//binary.Read(file, binary.LittleEndian, &thing.str3)

我收到以下错误:

panic: reflect: reflect.Value.SetInt using value obtained using unexported field

有人能说我为什么吗?

所有示例都使用“优化方式”

谢谢:)

1 个答案:

答案 0 :(得分:3)

str1str2str3未导出。这意味着其他包裹无法看到它们。要导出它们,请将第一个字母大写。

type Header struct {
    Str1 int32
    Str2 [255]byte
    Str3 float64
}