Кастинг uintptr как upointer - это харам.Вы должны прочитать правила: https://golang.org/pkg/unsafe/#Pointer
Но есть хакерский способ, который не должен выдавать предупреждение:
//go:linkname gostringn runtime.gostringn
func gostringn(p uintptr, l int) string
//go:linkname findnull runtime.findnull
//go:nosplit
func findnull(s uintptr) int
// ....
name := gostringn(r, findnull(r))
Функции получают указатель, но мы связываем их из среды выполнения как uintptr, потому что ониимеют одинаковый размер.
Может работать в теории.Но также осуждается.
Возвращаясь к своему коду, как сказал JimB, вы можете сделать это одной строкой с:
name := C.GoString((*C.char)(unsafe.Pointer(r)))