code: func Set(s interface{}, name string, value interface{}) error {
  	if s == nil {
  		return errors.New("Invalid input <nil>")
  	}
  
  	sv := valueOf(s)
  	if isPtr(sv) {
  		sv = sv.Elem()
  	} else {
  		return errors.New("Destination struct is not a pointer")
  	}
  
  	fv, err := getField(sv, name)
  	if err != nil {
  		return err
  	}
  
  	if !fv.CanSet() {
  		return fmt.Errorf("Field: %v, cannot be settable", name)
  	}
  
  	tv := valueOf(value)
  	if isPtr(tv) {
  		tv = tv.Elem()
  	}
  
  	if (fv.Kind() != tv.Kind()) || fv.Type() != tv.Type() {
  		return fmt.Errorf("Field: %v, type/kind did not match", name)
  	}
  
  	// assign the given value
  	fv.Set(tv)
  
  	return nil
  }
docs: // Set method sets a value into field on struct by field name.
  // 		Example:
  //
  // 		src := SampleStruct {
  // 			BookCount      int         `json:"-"`
  // 			BookCode       string      `json:"-"`
  // 			ArchiveInfo    BookArchive `json:"archive_info,omitempty"`
  // 			Region         BookLocale  `json:"region,omitempty"`
  // 		}
  //
  // 		bookLocale := BookLocale {
  //			Locale: "en-US",
  //			Language: "en",
  //			Region: "US",
  // 		}
  //
  // 		err := model.Set(&src, "Region", bookLocale)
  // 		fmt.Println("Error:", err)
  //
  // Note: Set method does not honor model tag annotations. Set simply given
  // value by field name on exported fields.
  //