You can not select more than 25 topics
			Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
		
		
		
		
		
			
		
			
				
					
					
						
							40 lines
						
					
					
						
							1.0 KiB
						
					
					
				
			
		
		
		
			
			
			
		
		
	
	
							40 lines
						
					
					
						
							1.0 KiB
						
					
					
				| package util | |
| 
 | |
| import "reflect" | |
| 
 | |
| // IsNotEmpty returns true if the given value is not zero or empty. | |
| func IsNotEmpty(given interface{}) bool { | |
| 	return !IsEmpty(given) | |
| } | |
| 
 | |
| // IsEmpty returns true if the given value has the zero value for its type. | |
| func IsEmpty(given interface{}) bool { | |
| 	g := reflect.ValueOf(given) | |
| 	if !g.IsValid() { | |
| 		return true | |
| 	} | |
| 
 | |
| 	if g.Kind() == reflect.Ptr { | |
| 		g = g.Elem() | |
| 	} | |
| 
 | |
| 	// Basically adapted from text/template.isTrue | |
| 	switch g.Kind() { | |
| 	case reflect.Array, reflect.Slice, reflect.Map, reflect.String: | |
| 		return g.Len() == 0 | |
| 	case reflect.Bool: | |
| 		return !g.Bool() | |
| 	case reflect.Complex64, reflect.Complex128: | |
| 		return g.Complex() == 0 | |
| 	case reflect.Int, reflect.Int8, reflect.Int16, reflect.Int32, reflect.Int64: | |
| 		return g.Int() == 0 | |
| 	case reflect.Uint, reflect.Uint8, reflect.Uint16, reflect.Uint32, reflect.Uint64, reflect.Uintptr: | |
| 		return g.Uint() == 0 | |
| 	case reflect.Float32, reflect.Float64: | |
| 		return g.Float() == 0 | |
| 	case reflect.Struct: | |
| 		return g.IsZero() | |
| 	default: | |
| 		return g.IsNil() | |
| 	} | |
| }
 |