code: func (p *Point) Scan(value interface{}) error {
  	data, ok := value.([]byte)
  	if !ok {
  		return ErrUnsupportedDataType
  	}
  
  	//string of hex workaround
  	//[]byte passed is a string of hex hence the need to decode hex string to real []byte
  	if len(data) == 42 {
  		dst := make([]byte, 21)
  		_, err := hex.Decode(dst, data)
  		if err != nil {
  			return err
  		}
  		data = dst
  	}
  
  	if len(data) == 21 {
  		// the length of a point type in WKB
  		return p.unmarshalWKB(data)
  	}
  
  	if len(data) == 25 {
  		// Most likely MySQL's SRID+WKB format.
  		// However, could be a line string or multipoint with only one point.
  		// But those would be invalid for parsing a point.
  		return p.unmarshalWKB(data[4:])
  	}
  
  	if len(data) == 0 {
  		// empty data, return empty go struct which in this case
  		// would be [0,0]
  		return nil
  	}
  
  	return ErrIncorrectGeometry
  }
docs: // Scan implements the sql.Scanner interface allowing
  // point structs to be passed into rows.Scan(...interface{})
  // The column must be of type Point and must be fetched in WKB format.
  // Will attempt to parse MySQL's SRID+WKB format if the data is of the right size.
  // If the column is empty (not null) an empty point (0, 0) will be returned.