There is a complication owing to the fact that research data on E. coli is typically organized by strain. Once you've picked a strain among those listed at the ensembl bacterial genomes collection
you can download one, e.g.,
and then use rtracklayer to import
> ec1 = import("Escherichia_coli_k_12.GCA_000800765.1.30.gff3.gz") > head(ec1,2) GRanges object with 2 ranges and 19 metadata columns: seqnames ranges strand | source type score phase <Rle> <IRanges> <Rle> | <factor> <factor> <numeric> <integer>  Chromosome [190, 255] + | ena gene <NA> <NA>  Chromosome [190, 255] + | ena transcript <NA> <NA> ID Name biotype description <character> <character> <character> <character>  gene:ER3413_4519 thrL protein_coding thr operon leader peptide  transcript:AIZ54182 thrL-1 protein_coding <NA> gene_id logic_name version Parent transcript_id <character> <character> <character> <CharacterList> <character>  ER3413_4519 ena 1 <NA>  <NA> <NA> 1 gene:ER3413_4519 AIZ54182 constitutive ensembl_end_phase ensembl_phase exon_id rank <character> <character> <character> <character> <character>  <NA> <NA> <NA> <NA> <NA>  <NA> <NA> <NA> <NA> <NA> protein_id <character>  <NA>  <NA> ------- seqinfo: 1 sequence from an unspecified genome; no seqlengths
This should get you going. To move further in the direction of an OrganismDb resource for this organism, consider the material about halfway down in
where the steps required to make Sac.cer3 are reviewed. In this case you would unite the coordinate information acquired from ensembl with GO and the ENTREZ information in org.Ec.eg.db ....