Какой идиоматический способ работы с нестандартными массивами в Go?Я работаю над оболочками ETW, и функция TdhGetEventInformation заполняет предоставленный буфер памяти информацией о событиях.Метаданные события представлены структурой TRACE_EVENT_INFO , в которой член массива объявлен как:
EVENT_PROPERTY_INFO EventPropertyInfoArray[ANYSIZE_ARRAY];
Я вызываю функцию TdhGetEventInformation
таким образом, чтобы в указанном буфере было достаточнопространство для заполнения массива свойств события:
var bufferSize uint32 = 4096
buffer := make([]byte, bufferSize)
tdhGetEventInformation.Call(
uintptr(unsafe.Pointer(eventRecord)),
0, 0,
uintptr(unsafe.Pointer(&buffer[0])),
uintptr(unsafe.Pointer(&bufferSize)),
)
Однако, так как мне хочется смоделировать структуру аналога Go с полем EventPropertyInfoArray
как
EventPropertyInfoArray [1]EventPropertyInfo
, компилятор не можетизмените размер массива в соответствии с количеством доступных свойств для каждого события, поэтому я получу один элемент массива.
У вас есть какие-нибудь умные идеи о том, как обращаться с этим крайним случаем?
Заранее спасибо