英文:
Merging of map and struct golang
问题
我有两个项目,collections
和 accounts
,分别由两个结构体表示,我想将它们合并为一个单一的响应。
collections, accounts, err := h.Service.Many(ctx, params)
collection 结构体定义如下:
type Collection struct {
ID int64 `json:"id"`
Name *string `json:"name"`
Description *string `json:"description"`
Total *int64 `json:"total"`
}
而 accounts 则被定义为一个 map,如下所示 accounts := make(map[int64][]string)
,数据看起来像这样 map[1:[19565 21423] 7:[]]
。
我想要做的是将这两个结构体合并,类似于以下方式:
// 合并为单个结构体
type CollectionWithAccounts struct {
Collections []*collection.Collection
AccountIDs []string
}
// 初始化结构体
collectionsWithAccounts := make([]CollectionWithAccounts, 0)
// 在循环中合并结构体
for _, collection := range collections {
for _, account := range accounts {
collectionsWithAccounts.Collections = append(collectionsWithAccounts, collection)
collectionsWithAccounts.Accounts = append(collectionsWithAccounts, account)
}
}
如何实现这个合并呢?
英文:
I have 2 items, collections
and accounts
represented by 2 structs that I would like to merge into a single response.
collections, accounts, err := h.Service.Many(ctx, params)
The collection struct is defined as follows:
type Collection struct {
ID int64 `json:"id"`
Name *string `json:"name"`
Description *string `json:"description"`
Total *int64 `json:"total"`
}
And accounts is defined as a map as such accounts := make(map[int64][]string)
and the data looks like this map[1:[19565 21423] 7:[]]
What I would like to do is merge these 2 something like the following:
// merge into single struct
type CollectionWithAccounts struct {
Collections []*collection.Collection
AccountIDs []string
}
// initialize struct
collectionsWithAccounts := make([]CollectionWithAccounts, 0)
// merge strucst in loop
for _, collection := range collections {
for _, account := range accounts {
collectionsWithAccounts.Collections = append(collectionsWithAccounts, collection)
collectionsWithAccounts.Accounts = append(collectionsWithAccounts, account)
}
}
How can I accomplish this merge?
答案1
得分: 1
即使没有任何循环,你也可以这样做:
package main
import "fmt"
type Collection struct {
ID int64 `json:"id"`
Name *string `json:"name"`
Description *string `json:"description"`
Total *int64 `json:"total"`
}
type AccountID map[int64][]string
// 合并为单个结构体
type CollectionWithAccounts struct {
Collections []*Collection
AccountIDs []AccountID
}
func main() {
// 获取数据
// []*Collection, []AccountID, err
collections, accounts, err := h.Service.Many(ctx, params)
// 处理错误
if err != nil {
fmt.Println(err.Error())
// 更多逻辑
}
collectionWithAccounts := CollectionWithAccounts{
Collections: collections,
AccountIDs: accounts,
}
}
英文:
You can do this even without any loops:
package main
import "fmt"
type Collection struct {
ID int64 `json:"id"`
Name *string `json:"name"`
Description *string `json:"description"`
Total *int64 `json:"total"`
}
type AccountID map[int64][]string
// merge into single struct
type CollectionWithAccounts struct {
Collections []*Collection
AccountIDs []AccountID
}
func main() {
// get the data
// []*Collections, []AccountID, err
collections, accounts, err := h.Service.Many(ctx, params)
// handle error
if err != nil {
fmt.Println(err.Error())
// more logic
}
collectionsWithAccounts := CollectionWithAccounts{
Collections: collections,
AccountIDs: accounts,
}
}
通过集体智慧和协作来改善编程学习和解决问题的方式。致力于成为全球开发者共同参与的知识库,让每个人都能够通过互相帮助和分享经验来进步。
评论