code: func parseHeader(rd io.Reader) (tagHeader, error) {
  	var header tagHeader
  
  	data := make([]byte, tagHeaderSize)
  	n, err := rd.Read(data)
  	if err != nil {
  		return header, err
  	}
  	if n < tagHeaderSize {
  		return header, ErrSmallHeaderSize
  	}
  
  	if !isID3Tag(data[0:3]) {
  		return header, errNoTag
  	}
  
  	header.Version = data[3]
  
  	// Tag header size is always synchsafe.
  	size, err := parseSize(data[6:], true)
  	if err != nil {
  		return header, err
  	}
  
  	header.FramesSize = size
  	return header, nil
  }
docs: // parseHeader parses tag header in rd.
  // If there is no tag in rd, it returns errNoTag.
  // If rd is smaller than expected, it returns ErrSmallHeaderSize.