code: func populateDefaults(numParams int, info *methodInfo, rv reflect.Value) {
  	// When there are no more parameters left in the supplied parameters,
  	// any remaining struct fields must be optional.  Thus, populate them
  	// with their associated default value as needed.
  	for i := numParams; i < info.maxParams; i++ {
  		rvf := rv.Field(i)
  		if defaultVal, ok := info.defaults[i]; ok {
  			rvf.Set(defaultVal)
  		}
  	}
  }
docs: // populateDefaults populates default values into any remaining optional struct
  // fields that did not have parameters explicitly provided.  The caller should
  // have previously checked that the number of parameters being passed is at
  // least the required number of parameters to avoid unnecessary work in this
  // function, but since required fields never have default values, it will work
  // properly even without the check.