The go prometheus client exposes a set of metrics about the go runtime, primarily around memory allocation, in addition to any that your application itself may choose to create. e.g.
# HELP go_gc_duration_seconds A summary of the pause duration of garbage collection cycles.
# TYPE go_gc_duration_seconds summary
go_gc_duration_seconds{quantile="0"} 6.0172e-05
go_gc_duration_seconds{quantile="0.25"} 9.5332e-05
go_gc_duration_seconds{quantile="0.5"} 0.000156344
go_gc_duration_seconds{quantile="0.75"} 0.000251318
go_gc_duration_seconds{quantile="1"} 0.009676708
go_gc_duration_seconds_sum 50.006084432
go_gc_duration_seconds_count 65939
# HELP go_goroutines Number of goroutines that currently exist.
# TYPE go_goroutines gauge
go_goroutines 8
# HELP go_info Information about the Go environment.
# TYPE go_info gauge
go_info{version="go1.17.3"} 1
# HELP go_memstats_alloc_bytes Number of bytes allocated and still in use.
# TYPE go_memstats_alloc_bytes gauge
go_memstats_alloc_bytes 1.723848e+06
# HELP go_memstats_alloc_bytes_total Total number of bytes allocated, even if freed.
# TYPE go_memstats_alloc_bytes_total counter
go_memstats_alloc_bytes_total 1.5390297904e+11
... etc
If you're looking for application bottlenecks, google for "go profiling" or "go pprof" and you'll find plenty of helpful guides.