code: func GetPointers(v reflect.Value) ([]uintptr, []uintptr, []uintptr) {
  	pm := &pointerMap{
  		allpointers:       []uintptr{},
  		reusedPointers:    []uintptr{},
  		primitivePointers: []uintptr{},
  	}
  	pm.getAllAndReusedPointers(v)
  	pm.getPrimitivePointers(v)
  	return pm.allpointers, pm.reusedPointers, pm.primitivePointers
  }
docs: // GetPointers recursively maps all pointers mentioned in a tree, breaking
  // circular references, and provides a list of:
  // * all pointers
  // * all pointers that were referenced at least twice
  // * all pointers that point to primitive type