code: def read_ncbi_gene2go(fin_gene2go, taxids=None, **kws):
      
      obj = Gene2GoReader(fin_gene2go, taxids=taxids)
      # By default, return id2gos. User can cause go2geneids to be returned by:
      #   >>> read_ncbi_gene2go(..., go2geneids=True
      if 'taxid2asscs' not in kws:
          if len(obj.taxid2asscs) == 1:
              taxid = next(iter(obj.taxid2asscs))
              kws_ncbi = {k:v for k, v in kws.items() if k in AnnoOptions.keys_exp}
              kws_ncbi['taxid'] = taxid
              return obj.get_id2gos(**kws_ncbi)
      # Optional detailed associations split by taxid and having both ID2GOs & GO2IDs
      # e.g., taxid2asscs = defaultdict(lambda: defaultdict(lambda: defaultdict(set))
      t2asscs_ret = obj.get_taxid2asscs(taxids, **kws)
      t2asscs_usr = kws.get('taxid2asscs', defaultdict(lambda: defaultdict(lambda: defaultdict(set))))
      if 'taxid2asscs' in kws:
          obj.fill_taxid2asscs(t2asscs_usr, t2asscs_ret)
      return obj.get_id2gos_all(t2asscs_ret)
docs: Read NCBI's gene2go. Return gene2go data for user-specified taxids.