code: func (f *Frame) MarshalFCS() ([]byte, error) {
  	// Frame length with 4 extra bytes for frame check sequence
  	b := make([]byte, f.length()+4)
  	if _, err := f.read(b); err != nil {
  		return nil, err
  	}
  
  	// Compute IEEE CRC32 checksum of frame bytes and place it directly
  	// in the last four bytes of the slice
  	binary.BigEndian.PutUint32(b[len(b)-4:], crc32.ChecksumIEEE(b[0:len(b)-4]))
  	return b, nil
  }
docs: // MarshalFCS allocates a byte slice, marshals a Frame into binary form, and
  // finally calculates and places a 4-byte IEEE CRC32 frame check sequence at
  // the end of the slice.
  //
  // Most users should use MarshalBinary instead.  MarshalFCS is provided as a
  // convenience for rare occasions when the operating system cannot
  // automatically generate a frame check sequence for an Ethernet frame.