code: func (f *Field) Set(val interface{}) error {
  	// we can't set unexported fields, so be sure this field is exported
  	if !f.IsExported() {
  		return errNotExported
  	}
  
  	// do we get here? not sure...
  	if !f.value.CanSet() {
  		return errNotSettable
  	}
  
  	given := reflect.ValueOf(val)
  
  	if f.value.Kind() != given.Kind() {
  		return fmt.Errorf("wrong kind. got: %s want: %s", given.Kind(), f.value.Kind())
  	}
  
  	f.value.Set(given)
  	return nil
  }
docs: // Set sets the field to given value v. It returns an error if the field is not
  // settable (not addressable or not exported) or if the given value's type
  // doesn't match the fields type.