code: func decode(reply []byte, dest interface{}) error {
  	// Check the type of dest and make sure it is a pointer to something,
  	// otherwise we can't set its value in any meaningful way.
  	val := reflect.ValueOf(dest)
  	if val.Kind() != reflect.Ptr {
  		return fmt.Errorf("Argument to decode must be pointer. Got %T", dest)
  	}
  
  	// Use the gob package to decode the reply and write the result into
  	// dest.
  	buf := bytes.NewBuffer(reply)
  	dec := gob.NewDecoder(buf)
  	if err := dec.DecodeValue(val.Elem()); err != nil {
  		return err
  	}
  	return nil
  }
docs: // decode decodes a slice of bytes and scans the value into dest using the gob package.
  // All types are supported except recursive data structures and functions.