登录
首页 >  Golang >  Go问答

合并 golang 中的 map 和 struct

来源:stackoverflow

时间:2024-03-18 11:03:31 363浏览 收藏

在 Go 中,合并 map 和结构时,可以将 map 中的值直接赋值给结构中的字段,从而实现数据的合并。此方法无需循环,简化了合并过程。本文将介绍如何使用这种方法将一个 map 和一个结构合并到一个新的结构中,并提供一个示例代码片段。

问题内容

我有 2 个项目,collectionsaccounts,由 2 个结构表示,我想将它们合并到单个响应中。

集合,帐户,err := h.service.many(ctx, params)

集合结构定义如下:

type collection struct {
    id          int64      `json:"id"`
    name        *string    `json:"name"`
    description *string    `json:"description"`
    total       *int64     `json:"total"`
}

帐户被定义为映射,如 accounts := make(map[int64][]string) ,数据如下 map[1:[19565 21423] 7:[]]

我想做的是将这两个内容合并起来,如下所示:

// 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)
    }
}

我怎样才能完成这个合并?


正确答案


即使没有任何循环,您也可以执行此操作:

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,
    }   
}

文中关于的知识介绍,希望对你的学习有所帮助!若是受益匪浅,那就动动鼠标收藏这篇《合并 golang 中的 map 和 struct》文章吧,也可关注golang学习网公众号了解相关技术文章。

声明:本文转载于:stackoverflow 如有侵犯,请联系study_golang@163.com删除
相关阅读
更多>
最新阅读
更多>
课程推荐
更多>