Golang如何将struct的sizeof提取为int

I'm starting to learn golang but come across what I hope is a simple problem.

I have a file written to in C with several structs. ie myStruct's Now I want to read one struct of data from this file.

In C I simple open a file and move the fileptr number of structs * sizeofStruct. Like this

int sizeofStruct = sizeof(myStruct)
seek(filehandle, searchNo*sizeofStruct)
read(filehandle, &data, sizeofStruct)

This doesn't seem to be as simple in Golang as "sizeof"... rather multiple conversions ending up in uintptr... something, or reflect.int32()

var spect Spectrum // struct Spectrum
const SizeOfSpectrum = unsafe.Sizeof(spect)

I was hoping SizeOfSpectrum would contain equal to sizeof(spect) in C

Can you guys help me to get the size of a struct in an int variable?

I have a file written to in C with several structs. ie myStruct's Now I want to read one struct of data from this file. In C i simple open a file and move the fileptr number of structs * sizeofStruct.

I haven't found a way to get the numeric value and multiply with another, say int16 value. Purpose is to seek a position within the file.


You do the same thing in Go, using explicit conversions.

For example,

package main

import (
    "fmt"
    "unsafe"
)

func main() {
    type S struct{ F int32 }
    i16 := int16(42)
    // The Go Programming Language Specification
    // https://golang.org/ref/spec
    // Numeric types
    // Explicit conversions are required when different
    // numeric types are mixed in an expression or assignment.
    // func (f *File) Seek(offset int64, whence int) (ret int64, err error)
    offset := int64(i16) * int64(unsafe.Sizeof(S{}))
    fmt.Println(offset)
}

Playground: https://play.golang.org/p/YFyU11Lf2qc

Output:

168