我的编程空间,编程开发者的网络收藏夹
学习永远不晚

用于嵌套对象的 Golang 结构

短信预约 -IT技能 免费直播动态提醒
省份

北京

  • 北京
  • 上海
  • 天津
  • 重庆
  • 河北
  • 山东
  • 辽宁
  • 黑龙江
  • 吉林
  • 甘肃
  • 青海
  • 河南
  • 江苏
  • 湖北
  • 湖南
  • 江西
  • 浙江
  • 广东
  • 云南
  • 福建
  • 海南
  • 山西
  • 四川
  • 陕西
  • 贵州
  • 安徽
  • 广西
  • 内蒙
  • 西藏
  • 新疆
  • 宁夏
  • 兵团
手机号立即预约

请填写图片验证码后获取短信验证码

看不清楚,换张图片

免费获取短信验证码

用于嵌套对象的 Golang 结构

php小编苹果分享了关于Golang语言中用于嵌套对象的结构的详细介绍。在Golang中,嵌套对象的结构是一种强大的特性,它允许我们在一个结构体中嵌套其他结构体或接口类型。通过嵌套对象的结构,我们可以轻松地组合和重用代码,提高代码的可读性和可维护性。不仅如此,嵌套对象的结构还可以实现多重继承的效果,让我们能够更灵活地设计和构建复杂的数据结构。在本文中,我们将详细探讨Golang中嵌套对象的结构的使用方法和技巧,帮助读者更好地理解和应用这一特性。

问题内容

我目前正在使用 gofiber v2 创建 golang api。

我在 mongo 数据库中拥有以下音乐曲目的文档结构:

{
    "_id" : objectid("63cc26cb86ae1611380e1206"),
    "active" : 1,
    "exclusive" : "false",
    "track_title" : "burn slow (sting)",
    "artist_id" : "395",
    "artist_name" : "david hollandsworth",
    "album_title" : "cult justice 23",
    "composer" : "david hollandsworth",
    "duration" : "00:16",
    "publisher" : "fliktrax, llc",
    "description" : "t.v. drama, rural tension, apprehension. style: \"hell on wheels\" soundtrack.",
    "url_path" : "davidhollandsworth/cultjustice23/burn-slow-sting.wav",
    "vocal_type" : "instrumental",
    "beats_per_minute" : "80",
    "file_path_compressed" : "davidhollandsworth/cultjustice23/burn-slow-sting.mp3",
    "file_path_uncompressed" : "davidhollandsworth/cultjustice23/burn-slow-sting.wav",

    "genres" : [ 
        "tension", 
        "americana", 
        "tv drama"
    ],
    "genres_keys" : [ 
        "tension", 
        "americana", 
        "tv drama"
    ],
    "moods" : [ 
        "tension", 
        "bluesy", 
        "spacey"
    ],
    "styles" : [ 
        "tv drama", 
        "unsolved mystery", 
        "western"
    ],
    "instruments" : [ 
        "dobro", 
        "banjo", 
        "percussion"
    ],
    "keywords" : [ 
        "rural-tension", 
        " showdown", 
        " apprehension", 
        " uncertainty", 
        " light-tension", 
        " strings-tension", 
        " heartland", 
        " trouble", 
        " uneasy", 
        " cautious", 
        " outlaw", 
        " yellowstone", 
        " bayou", 
        " gritty", 
        " swampy", 
        " swamp-people", 
        " southern", 
        " uncertain", 
        " drama", 
        " apprehension", 
        " bluesy", 
        " blues", 
        " shack", 
        " poor-folk", 
        " primitive"
    ],
    "sounds_like" : [ 
        "brian tyler", 
        "max richter", 
        "t.v. drama"
    ],
    "resembles_song" : [ 
        "hell on wheels", 
        "yellowstone", 
        "rural/outlaw/tension"
    ],
    "last_modified" : 1674323659,
    "variation_count" : 5,
    "variations" : {
        "_id" : objectid("63cc26bc86ae1611380e1200"),
        "track_title" : "burn slow",
        "artist_name" : "david hollandsworth",
        "master_track_id" : "63cc26bc86ae1611380e1200",
        "master_track" : objectid("63cc26bc86ae1611380e1200"),
        "merged" : 1,
        "variation_count" : 5,
        "variations" : {
            "63cc26bc86ae1611380e1200" : {
                "track_id" : "63cc26bc86ae1611380e1200",
                "track_title" : "burn slow",
                "artist_name" : "david hollandsworth"
            },
            "63cc26c086ae1611380e1203" : {
                "track_id" : "63cc26c086ae1611380e1203",
                "track_title" : "burn slow (bed mix)",
                "artist_name" : "david hollandsworth"
            },
            "63cc26c386ae1611380e1204" : {
                "track_id" : "63cc26c386ae1611380e1204",
                "track_title" : "burn slow (cutdown)",
                "artist_name" : "david hollandsworth"
            },
            "63cc26c786ae1611380e1205" : {
                "track_id" : "63cc26c786ae1611380e1205",
                "track_title" : "burn slow (lows and perc)",
                "artist_name" : "david hollandsworth"
            },
            "63cc26cb86ae1611380e1206" : {
                "track_id" : "63cc26cb86ae1611380e1206",
                "track_title" : "burn slow (sting)",
                "artist_name" : "david hollandsworth"
            }
        }
    }
}

目前,我的 golang 模型中有以下轨道结构:

type Track struct {
    ID                   primitive.ObjectID `bson:"_id, omitempty" json:"_id"`
    TrackTitle           string             `bson:"track_title" json:"track_title"`
    ArtistId             string             `bson:"artist_id" json:"artist_id"`
    ArtistName           string             `bson:"artist_name" json:"artist_name"`
    AlbumTitle           string             `bson:"album_title" json:"album_title"`
    Composer             string             `bson:"composer" json:"composer"`
    Publisher            string             `bson:"publisher" json:"publisher"`
    Description          string             `bson:"description" json:"description"`
    Duration             string             `bson:"duration" json:"duration"`
    UrlPath              string             `bson:"url_path" json:"url_path"`
    VocalType            string             `bson:"vocal_type" json:"vocal_type"`
    BeatsPerMinute       string             `bson:"beats_per_minute" json:"beats_per_minute"`
    FilePathCompressed   string             `bson:"file_path_compressed" json:"bfile_path_compressed"`
    FilePathUncompressed string             `bson:"file_path_uncompressed" json:"file_path_uncompressed"`
    PreviewURL           string             `bson:"preview_url" json:"preview_url"`
    Genres               []interface{}      `bson:"genres" json:"genres"`
    GenresKeys           []interface{}      `bson:"genres_keys" json:"genres_keys"`
    Moods                []interface{}      `bson:"moods" json:"moods"`
    Styles               []interface{}      `bson:"styles" json:"styles"`
    Instruments          []interface{}      `bson:"instruments" json:"instruments"`
    Keywords             []interface{}      `bson:"keywords" json:"keywords"`
    SoundsLike           []interface{}      `bson:"sounds_like" json:"sounds_like"`
    ResemblesSong        []interface{}      `bson:"resembles_song" json:"resembles_song"`
    LastModified         int                `bson:"last_modified" json:"last_modified"`
    VariationCount       int                `bson:"variation_count" json:"variation_count"`
}

目前,所有文档字段都已正确解码为 json,但是我现在在如何构造嵌入的“variations.variations”字段(请注意,变体中存在变体)方面陷入了僵局。嵌入变体的结构是一个没有键的对象,而是一个动态的 mongo id 字符串。

我尝试实现自定义结构和接口类型,但没有成功。

如果有人以前遇到过此问题,我们将不胜感激。

解决方法

我建议尽可能避免使用 interface{} (或 any),使用具体类型。例如。 genres 是一个字符串数组,在 go 中使用 []string

对于 variations.variations 字段,您可以使用 map 以及 string 键和描述其元素的结构类型。

type Track struct {
    ID                   primitive.ObjectID `bson:"_id, omitempty" json:"_id"`
    TrackTitle           string             `bson:"track_title" json:"track_title"`
    ArtistId             string             `bson:"artist_id" json:"artist_id"`
    ArtistName           string             `bson:"artist_name" json:"artist_name"`
    AlbumTitle           string             `bson:"album_title" json:"album_title"`
    Composer             string             `bson:"composer" json:"composer"`
    Publisher            string             `bson:"publisher" json:"publisher"`
    Description          string             `bson:"description" json:"description"`
    Duration             string             `bson:"duration" json:"duration"`
    UrlPath              string             `bson:"url_path" json:"url_path"`
    VocalType            string             `bson:"vocal_type" json:"vocal_type"`
    BeatsPerMinute       string             `bson:"beats_per_minute" json:"beats_per_minute"`
    FilePathCompressed   string             `bson:"file_path_compressed" json:"bfile_path_compressed"`
    FilePathUncompressed string             `bson:"file_path_uncompressed" json:"file_path_uncompressed"`
    PreviewURL           string             `bson:"preview_url" json:"preview_url"`
    Genres               []string           `bson:"genres" json:"genres"`
    GenresKeys           []string           `bson:"genres_keys" json:"genres_keys"`
    Moods                []string           `bson:"moods" json:"moods"`
    Styles               []string           `bson:"styles" json:"styles"`
    Instruments          []string           `bson:"instruments" json:"instruments"`
    Keywords             []string           `bson:"keywords" json:"keywords"`
    SoundsLike           []string           `bson:"sounds_like" json:"sounds_like"`
    ResemblesSong        []string           `bson:"resembles_song" json:"resembles_song"`
    LastModified         int                `bson:"last_modified" json:"last_modified"`
    VariationCount       int                `bson:"variation_count" json:"variation_count"`
    Variations           Variations         `bson:"variations" json:"variations"`
}

type Variations struct {
    ID             primitive.ObjectID   `bson:"_id" json:"_id"`
    TrackTitle     string               `bson:"track_title" json:"track_title"`
    ArtistName     string               `bson:"artist_name" json:"artist_name"`
    MasterTrackID  string               `bson:"master_track_id" json:"master_track_id"`
    MasterTrack    primitive.ObjectID   `bson:"master_track" json:"master_track"`
    Merged         int                  `bson:"merged" json:"merged"`
    VariationCount int                  `bson:"variation_count" json:"variation_count"`
    Variations     map[string]Variation `bson:"variations" json:"variations"`
}

type Variation struct {
    TrackID    string `bson:"track_id" json:"track_id"`
    TrackTitle string `bson:"track_title" json:"track_title"`
    ArtistName string `bson:"artist_name" json:"artist_name"`
}

以上就是用于嵌套对象的 Golang 结构的详细内容,更多请关注编程网其它相关文章!

免责声明:

① 本站未注明“稿件来源”的信息均来自网络整理。其文字、图片和音视频稿件的所属权归原作者所有。本站收集整理出于非商业性的教育和科研之目的,并不意味着本站赞同其观点或证实其内容的真实性。仅作为临时的测试数据,供内部测试之用。本站并未授权任何人以任何方式主动获取本站任何信息。

② 本站未注明“稿件来源”的临时测试数据将在测试完成后最终做删除处理。有问题或投稿请发送至: 邮箱/279061341@qq.com QQ/279061341

用于嵌套对象的 Golang 结构

下载Word文档到电脑,方便收藏和打印~

下载Word文档

猜你喜欢

用于嵌套对象的 Golang 结构

php小编苹果分享了关于Golang语言中用于嵌套对象的结构的详细介绍。在Golang中,嵌套对象的结构是一种强大的特性,它允许我们在一个结构体中嵌套其他结构体或接口类型。通过嵌套对象的结构,我们可以轻松地组合和重用代码,提高代码的可读性和
用于嵌套对象的 Golang 结构
2024-02-09

sqlx 无法对嵌套结构使用结构扫描

从现在开始,我们要努力学习啦!今天我给大家带来《sqlx 无法对嵌套结构使用结构扫描》,感兴趣的朋友请继续看下去吧!下文中的内容我们主要会涉及到等等知识点,如果在阅读本文过程中有遇到不清楚的地方,欢迎留言呀!我们一起讨论,一起学习!问题内容
sqlx 无法对嵌套结构使用结构扫描
2024-04-05

golang中结构体嵌套接口的实现

本文主要介绍了golang中结构体嵌套接口的实现,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
2023-05-14

怎么在golang中利用结构体嵌套的切片数组

本篇文章为大家展示了怎么在golang中利用结构体嵌套的切片数组,内容简明扼要并且容易理解,绝对能使你眼前一亮,通过这篇文章的详细介绍希望你能有所收获。什么是golanggolang 是Google开发的一种静态强类型、编译型、并发型,并具
2023-06-14

将 parquet 文件转换为带有嵌套元素的 Golang 结构

php小编新一将介绍如何将 parquet 文件转换为带有嵌套元素的 Golang 结构。Parquet 是一种高效的列式存储格式,而 Golang 是一种强大的编程语言,将它们结合起来可以帮助我们更好地处理和分析大量的数据。通过使用适当的
将 parquet 文件转换为带有嵌套元素的 Golang 结构
2024-02-10

解析ES6中的解构赋值(数组,对象,嵌套,默认值)

解构赋值是一种特殊的语法,它使我们可以将数组或对象“拆包”至一系列变量中,因为有时这样更方便,接下来通过本文给大家介绍ES6中的解构赋值(数组,对象,嵌套,默认值),需要的朋友可以参考下
2022-11-16

如何使用名称具有包名称的嵌套结构来启动 go 结构

问题内容我有一个 go 结构体定义如下:type record struct {events.apigatewayproxyrequest `json:",omitempty"`events.apigatewayweb
如何使用名称具有包名称的嵌套结构来启动 go 结构
2024-02-06

基于 Golang 构建嵌入式系统的实用指南

使用 go 构建嵌入式系统的实用指南:根据处理器架构、内存和外围设备选择合适的硬件。设置 go 编译器、交叉编译器和集成开发环境。编写应用程序代码(如示例中闪烁 led 的代码)。使用交叉编译器编译代码并加载到嵌入式设备。利用 go 的调试
基于 Golang 构建嵌入式系统的实用指南
2024-04-08

如何解决Mybatis中foreach嵌套使用if标签对象取值的问题

今天小编给大家分享一下如何解决Mybatis中foreach嵌套使用if标签对象取值的问题的相关知识点,内容详细,逻辑清晰,相信大部分人都还太了解这方面的知识,所以分享这篇文章给大家参考一下,希望大家阅读完这篇文章后有所收获,下面我们一起来
2023-06-29

对于同一结构体,Golang 在 for 循环中 defer 的行为有所不同

问题内容我编写了以下 golang 代码并运行了它。type test struct {name string}func (t test) hello() {fmt.printf("hello, %s\n", t.name)}fun
对于同一结构体,Golang 在 for 循环中 defer 的行为有所不同
2024-02-06

golang函数在面向对象编程中的微服务架构下的应用

在面向对象编程的微服务架构中,go 函数通过函数式编程特性增强了 oop,包括一等公民和闭包,可用于创建可重用、模块化和高性能的微服务。例如,在订单处理微服务中,函数可以用于创建订单对象,访问外部变量,并为订单创建和存储提供可重用的代码。G
golang函数在面向对象编程中的微服务架构下的应用
2024-05-03

【Java基础教程】(七)面向对象篇 · 第一讲:上干货!面向对象的特性、类与对象、内存结构引用分析、垃圾收集器 GC处理、封装性详解、构造方法、匿名对象、简单 Java 类~

Java基础教程之面向对象 · 第一讲 🍉 篇章介绍本节学习目标1️⃣ 面向对象的三个特性2️⃣ 类与对象2.1 基本概念2.2 定义 3️⃣ 引用分析🔍 关于`垃圾收集器 GC`处理的介绍
2023-08-19

编程热搜

  • Python 学习之路 - Python
    一、安装Python34Windows在Python官网(https://www.python.org/downloads/)下载安装包并安装。Python的默认安装路径是:C:\Python34配置环境变量:【右键计算机】--》【属性】-
    Python 学习之路 - Python
  • chatgpt的中文全称是什么
    chatgpt的中文全称是生成型预训练变换模型。ChatGPT是什么ChatGPT是美国人工智能研究实验室OpenAI开发的一种全新聊天机器人模型,它能够通过学习和理解人类的语言来进行对话,还能根据聊天的上下文进行互动,并协助人类完成一系列
    chatgpt的中文全称是什么
  • C/C++中extern函数使用详解
  • C/C++可变参数的使用
    可变参数的使用方法远远不止以下几种,不过在C,C++中使用可变参数时要小心,在使用printf()等函数时传入的参数个数一定不能比前面的格式化字符串中的’%’符号个数少,否则会产生访问越界,运气不好的话还会导致程序崩溃
    C/C++可变参数的使用
  • css样式文件该放在哪里
  • php中数组下标必须是连续的吗
  • Python 3 教程
    Python 3 教程 Python 的 3.0 版本,常被称为 Python 3000,或简称 Py3k。相对于 Python 的早期版本,这是一个较大的升级。为了不带入过多的累赘,Python 3.0 在设计的时候没有考虑向下兼容。 Python
    Python 3 教程
  • Python pip包管理
    一、前言    在Python中, 安装第三方模块是通过 setuptools 这个工具完成的。 Python有两个封装了 setuptools的包管理工具: easy_install  和  pip , 目前官方推荐使用 pip。    
    Python pip包管理
  • ubuntu如何重新编译内核
  • 改善Java代码之慎用java动态编译

目录