code: func SlicesDeepEqual(slice1, slice2 interface{}) bool {
  	s1 := reflect.ValueOf(slice1)
  	s2 := reflect.ValueOf(slice2)
  
  	if s1.Len() != s2.Len() {
  		return false
  	}
  	if s1.Len() == 0 {
  		return true
  	}
  
  	s2found := make([]int, s2.Len())
  OuterLoop:
  	for i := 0; i < s1.Len(); i++ {
  		s1el := s1.Slice(i, i+1)
  		for j := 0; j < s2.Len(); j++ {
  			if s2found[j] == 1 {
  				// We already counted this s2 element
  				continue
  			}
  			s2el := s2.Slice(j, j+1)
  			if reflect.DeepEqual(s1el.Interface(), s2el.Interface()) {
  				s2found[j] = 1
  				continue OuterLoop
  			}
  		}
  		// Couldn't find something unused equal to s1
  		return false
  	}
  	return true
  }
docs: // SlicesDeepEqual checks if slice1 and slice2 are equal, disregarding order.