code: func (cMgr *ConfigurationManager) handlePtr(rValue reflect.Value, tagName string) error {
  	if rValue.IsNil() {
  		ptrValue := reflect.New(rValue.Type().Elem())
  		err := cMgr.unmarshal(ptrValue, getTagKey(tagName, doNotConsiderTag))
  		if err != nil {
  			return err
  		}
  
  		if rValue.CanSet() {
  			rValue.Set(ptrValue)
  		}
  		return nil
  	} else if rValue.Elem().Kind() == reflect.Ptr {
  		ptrValue := rValue.Elem()
  		err := cMgr.handlePtr(ptrValue, getTagKey(tagName, doNotConsiderTag))
  		if err != nil {
  			return err
  		}
  	}
  
  	ptrValue := rValue.Elem()
  	err := cMgr.unmarshal(ptrValue, getTagKey(tagName, doNotConsiderTag))
  	if err != nil {
  		return err
  	}
  
  	return nil
  }
docs: // handle pointer type objects