code: func (s *Struct) IsZero() bool {
  	fields := s.structFields()
  
  	for _, field := range fields {
  		val := s.value.FieldByName(field.Name)
  
  		_, tagOpts := parseTag(field.Tag.Get(s.TagName))
  
  		if IsStruct(val.Interface()) && !tagOpts.Has("omitnested") {
  			ok := IsZero(val.Interface())
  			if !ok {
  				return false
  			}
  
  			continue
  		}
  
  		// zero value of the given field, such as "" for string, 0 for int
  		zero := reflect.Zero(val.Type()).Interface()
  
  		//  current value of the given field
  		current := val.Interface()
  
  		if !reflect.DeepEqual(current, zero) {
  			return false
  		}
  	}
  
  	return true
  }
docs: // IsZero returns true if all fields in a struct is a zero value (not
  // initialized) A struct tag with the content of "-" ignores the checking of
  // that particular field. Example:
  //
  //   // Field is ignored by this package.
  //   Field bool `structs:"-"`
  //
  // A value with the option of "omitnested" stops iterating further if the type
  // is a struct. Example:
  //
  //   // Field is not processed further by this package.
  //   Field time.Time     `structs:"myName,omitnested"`
  //   Field *http.Request `structs:",omitnested"`
  //
  // Note that only exported fields of a struct can be accessed, non exported
  // fields  will be neglected. It panics if s's kind is not struct.