在golang中循环遍历数组对象和分组的最佳方法

I have a list of Books (BookId) and each book is associated to a Book collection (CollectionId).

I am trying to figure out the best way to group the results by Collection, so all the books that belong to a collection are listed under it and I can build the results in the following way:

Book A,D,G belong to Collection 1. Book B,C,E belong to Collection 2.

I have the books in a list/array that I need to loop through and look up the collectionID they belong to and them need to store the new lists as seen below:

CollectionID 1:

- Book A, Book D, Book G

CollectionID 2:

- Book B, Book C, Book E

CollectionID 3:

- Book F

You can use a map to store a slice of books per collection ID.

type Book struct {
    Title        string
    Author       string
    CollectionID int
}

func main() {
    books := GetBooks()
    collections := make(map[int][]Book)
    for _, b := range books {
        collections[b.CollectionID] = append(collections[b.CollectionID], b)
    }
    ...
}

First, you design your database. For example,

package main

type CollectionId string

type Collection struct {
    Id   CollectionId
    Name string
}

type BookId string

type Book struct {
    Id         BookId
    Name       string
    Collection CollectionId
}

type Books map[BookId]Book

type Collections map[CollectionId][]BookId

func main() {}