code: func (d *Decoder) decodeBasic(name string, data interface{}, val reflect.Value) error {
  	dataVal := reflect.ValueOf(data)
  	if !dataVal.IsValid() {
  		dataVal = reflect.Zero(val.Type())
  	}
  
  	dataValType := dataVal.Type()
  	if !dataValType.AssignableTo(val.Type()) {
  		return fmt.Errorf(
  			"'%s' expected type '%s', got '%s'",
  			name, val.Type(), dataValType)
  	}
  
  	val.Set(dataVal)
  	return nil
  }
docs: // This decodes a basic type (bool, int, string, etc.) and sets the
  // value to "data" of that type.