http://play.golang.org/p/RQXB-hCq_MGolang: Как пропустить поля структуры при чтении из буфера?
type Header struct {
ByteField1 uint32 // 4 bytes
ByteField2 [32]uint8 // 32 bytes
ByteField3 [32]uint8 // 32 bytes
SkipField1 []SomethingElse
}
func main() {
var header Header
headerBytes := make([]byte, 68) // 4 + 32 + 32 == 68
headerBuf := bytes.NewBuffer(headerBytes)
err := binary.Read(headerBuf, binary.LittleEndian, &header)
if err != nil {
fmt.Println(err)
}
fmt.Println(header)
}
Я не хочу, чтобы читать из буфера в структуры заголовка в кусках. Я хочу прочитать в байтовом поле за один шаг, но пропустить небайтовые поля. Если вы запустите программу в данной ссылке (http://play.golang.org/p/RQXB-hCq_M), вы обнаружите, что бинарный файл. Запишите ошибку: binary.Read: недопустимый тип [] main.SomethingElse
Есть ли способ, которым я могу пропустить это поле?
Update: основе ответа Dommage, я решил вставить поля внутри структуры вместо того, чтобы, как это http://play.golang.org/p/i0xfmnPx4A
Знаете ли вы размер 'SkipField1'? –
К сожалению Нет. Skipfield1 - это фрагмент структуры разного размера. – samol
Я думаю, вы могли бы определить новую структуру, состоящую из указателей на три поля фиксированной длины в вашей другой структуре, и 'binary.Read' будет читать это. (Не проверял и не кратковременно, так что не уверен, чтобы представить его в качестве ответа.) – twotwotwo