code: func (f *Frame) UnmarshalFCS(b []byte) error {
  	// Must contain enough data for FCS, to avoid panics
  	if len(b) < 4 {
  		return io.ErrUnexpectedEOF
  	}
  
  	// Verify checksum in slice versus newly computed checksum
  	want := binary.BigEndian.Uint32(b[len(b)-4:])
  	got := crc32.ChecksumIEEE(b[0 : len(b)-4])
  	if want != got {
  		return ErrInvalidFCS
  	}
  
  	return f.UnmarshalBinary(b[0 : len(b)-4])
  }
docs: // UnmarshalFCS computes the IEEE CRC32 frame check sequence of a Frame,
  // verifies it against the checksum present in the byte slice, and finally,
  // unmarshals a byte slice into a Frame.
  //
  // Most users should use UnmarshalBinary instead.  UnmarshalFCS is provided as
  // a convenience for rare occasions when the operating system cannot
  // automatically verify a frame check sequence for an Ethernet frame.