code: func maybeCopy(obj interface{}) interface{} {
  	v := reflect.ValueOf(obj)
  	if v.Kind() == reflect.Ptr {
  		return obj
  	}
  	v2 := reflect.New(v.Type())
  	v2.Elem().Set(v)
  	return v2.Interface()
  }
docs: // maybeCopy copies obj if it is not a pointer, to get a settable/addressable
  // object. Guaranteed to return a pointer.