# datasets.UnmarshalDatapoint

```go
func UnmarshalDatapoint(
    descriptor *datasets.DatapointDescriptor,
    data []byte,
) (map[string]any, error)
```

Decode a raw protobuf datapoint into a JSON-like map using a dataset descriptor.

## Parameters

**descriptor**

`*datasets.DatapointDescriptor`

required: true

The descriptor returned by [`NewDatapointDescriptor`](/docs/api-reference/go/datasets/NewDatapointDescriptor).

**data**

`[]byte`

required: true

The raw protobuf datapoint bytes returned by a datapoint query.

## Returns

A map of datapoint fields, or an error if the raw datapoint cannot be decoded.

```go title="Go"
descriptor, err := datasets.NewDatapointDescriptor(dataset)
if err != nil {
    return err
}

for data, err := range client.Datapoints.Query(ctx,
    dataset.ID,
    datasets.WithTemporalExtent(queryInterval),
) {
    if err != nil {
        return err
    }

    datapoint, err := datasets.UnmarshalDatapoint(descriptor, data)
    if err != nil {
        return err
    }
    fmt.Println(datapoint["id"])
}
```
