code: func HasConflicts(left, right interface{}) (bool, error) {
  	switch typedLeft := left.(type) {
  	case map[string]interface{}:
  		switch typedRight := right.(type) {
  		case map[string]interface{}:
  			for key, leftValue := range typedLeft {
  				rightValue, ok := typedRight[key]
  				if !ok {
  					return false, nil
  				}
  				return HasConflicts(leftValue, rightValue)
  			}
  
  			return false, nil
  		default:
  			return true, nil
  		}
  	case []interface{}:
  		switch typedRight := right.(type) {
  		case []interface{}:
  			if len(typedLeft) != len(typedRight) {
  				return true, nil
  			}
  
  			for i := range typedLeft {
  				return HasConflicts(typedLeft[i], typedRight[i])
  			}
  
  			return false, nil
  		default:
  			return true, nil
  		}
  	case string, float64, bool, int, int64, nil:
  		return !reflect.DeepEqual(left, right), nil
  	default:
  		return true, fmt.Errorf("unknown type: %v", reflect.TypeOf(left))
  	}
  }
docs: // HasConflicts returns true if the left and right JSON interface objects overlap with
  // different values in any key. All keys are required to be strings. Since patches of the
  // same Type have congruent keys, this is valid for multiple patch types. This method
  // supports JSON merge patch semantics.