I'm thinking about the possibility of having something like [][]Volume in Go. Do you know the size or number of Volumes in your struct?
There's an example of converting **char into []string that might be useful: https://stackoverflow.com/questions/36188649/cgo-char-to-slice-string On Tuesday, May 23, 2017 at 8:39:12 PM UTC+10, alex martin wrote: > > Hi > I have this structure in C created by rsl libray > > typedef struct { > Radar_header h; > Volume **v; > } Radar; > > > Using cgo i read the structure with > > > Radar *readRad(char *fname) { > return RSL_anyformat_to_radar(fname, NULL); > } > > > and call this function in go > > RPointer := C.readRad(C.CString(os.Args[1])) > > > and i see the structure > > with fmt.Printf("%T",RPointer) => *main._Ctype_struct___0 > > with fmt.Printf("%+v",RPointer) => &{h:{} _:[0 0 0 0] *v:0xe59b60*} > > > The field is a **C.Volume pointer. > > The question is: it's possible with Golang list all C.Volume's struct > pointed ? > > > like this > > > for i := 0; i < int(RPointer.h.nvolumes); i++ { > > pv := *RPointer.v[i] > fmt.Printf("\nVOLUME Sweep %+v\n", *pv.sweep) > } > > > the exit is type **C.struct___2 does not support indexing > > > I tried with unsafe.Pointer using > > > > *puint1 := unsafe.Pointer(RPointer.v)* > > > *sizep := unsafe.Sizeof(RPointer.v)fmt.Printf("\npuint [%+v] -> + sizeoff > [%+v]\n", puint1, unsafe.Pointer(uintptr(puint1)+sizep))* > > > and printf is puint [0xe59b60] -> + sizeoff [0xe59b68] > > > there is a casting like this > > > volume2 := (*C.Volume)(*unsafe.Pointer(uintptr(puint1) + sizep)) > > > Thanks > > Alex > > > > > -- You received this message because you are subscribed to the Google Groups "golang-nuts" group. To unsubscribe from this group and stop receiving emails from it, send an email to [email protected]. For more options, visit https://groups.google.com/d/optout.
