| 
						
						
							
								
							
						
						
					 | 
				
				 | 
				
					@ -3,6 +3,11 @@ | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					 */ | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					package helper | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					
 | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					import ( | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
						"errors" | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
						"fmt" | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					) | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					
 | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					// 求差集
 | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					func Diff(slice1, slice2 []string) []string { | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
						m := make(map[string]int) | 
				
			
			
		
	
	
		
			
				
					| 
						
							
								
							
						
						
							
								
							
						
						
					 | 
				
				 | 
				
					@ -52,5 +57,32 @@ func Union(slice1, slice2 []string) []string { | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
							} | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
						} | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
						return slice1 | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					} | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					
 | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					func Unique(originals interface{}) (interface{}, error) { | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
						temp := map[string]struct{}{} | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
						switch slice := originals.(type) { | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
						case []string: | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
							result := make([]string, 0, len(originals.([]string))) | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
							for _, item := range slice { | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
								key := fmt.Sprint(item) | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
								if _, ok := temp[key]; !ok { | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
									temp[key] = struct{}{} | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
									result = append(result, item) | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
								} | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
							} | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
							return result, nil | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
						case []int64: | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
							result := make([]int64, 0, len(originals.([]int64))) | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
							for _, item := range slice { | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
								key := fmt.Sprint(item) | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
								if _, ok := temp[key]; !ok { | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
									temp[key] = struct{}{} | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
									result = append(result, item) | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
								} | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
							} | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
							return result, nil | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
						default: | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
							return nil, errors.New(fmt.Sprintf("Unknown type: %T", slice)) | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
						} | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					} |