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 结构的详细内容。更多信息请关注PHP中文网其他相关文章!

Java 中对字符串排序的方法:使用 Arrays.sort() 方法对字符串数组按升序排序。使用 Collections.sort() 方法对字符串列表按升序排序。使用 Comparator 接口对字符串进行自定义排序。

C 语言中,\0 是字符串的结束标志,称为空字符或终止符。由于字符串在内存中以字节数组形式存储,编译器通过 \0 识别字符串结束,确保正确处理字符串。\0 工作原理:编译器遇到 \0 时停止读取字符,之后的字符被忽略。\0 自身不占存储空间。好处包括可靠的字符串处理、提高效率(无需扫描整个数组查找结束)以及方便比较和操作。

args 在 Java 中表示命令行参数,是一个字符串数组,包含程序启动时传递给它的参数列表。它仅在 main 方法中可用,其默认值为一个空数组,通过索引可以访问每个参数。args 用于接收和处理命令行参数,从而在程序启动时进行配置或提供输入数据。

如何在C语言编程软件中实现中文字符排序功能?在现代社会,中文字符排序功能在很多软件中都是必不可少的功能之一。无论是在文字处理软件、搜索引擎还是数据库系统中,都需要对中文字符进行排序,以便更好地展示和处理中文文本数据。而在C语言编程中,如何实现中文字符排序功能呢?下面将简要介绍一种方法。首先,为了在C语言中实现中文字符排序功能,我们需要使用到字符串比较函数。然

函数对C++程序性能的影响包括函数调用开销、局部变量和对象分配开销:函数调用开销:包括堆栈帧分配、参数传递和控制权转移,对小函数影响显著。局部变量和对象分配开销:大量局部变量或对象创建和销毁会导致堆栈溢出和性能下降。

C语言程序的运行起点是什么?C语言作为一种高级编程语言,是一种十分常用的编程语言之一。在学习C语言的过程中,很多人都会对C程序的运行起点感到困惑。那么,C语言程序的运行起点到底是什么呢?答案是main函数。在C语言程序中,程序的执行都是从main函数的开始处开始的。main函数是C语言程序的入口点,也是程序员定义的第一个被执行的函数。它的主要作用是用来定义程

PHP数组去重算法的复杂度:array_unique():O(n)array_flip()+array_keys():O(n)foreach循环:O(n^2)

我从外部服务器接收此json:[["010117"、"070117"、"080117"]、["080117"、"140117"、"150117"]、["150117"、"210117"、"220117"]]我需要解析它packagemainimport("encoding/json""fmt""io""os""runtime")typeRangestruct{FromstringTostring


热AI工具

Undresser.AI Undress
人工智能驱动的应用程序,用于创建逼真的裸体照片

AI Clothes Remover
用于从照片中去除衣服的在线人工智能工具。

Undress AI Tool
免费脱衣服图片

Clothoff.io
AI脱衣机

AI Hentai Generator
免费生成ai无尽的。

热门文章

热工具

mPDF
mPDF是一个PHP库,可以从UTF-8编码的HTML生成PDF文件。原作者Ian Back编写mPDF以从他的网站上“即时”输出PDF文件,并处理不同的语言。与原始脚本如HTML2FPDF相比,它的速度较慢,并且在使用Unicode字体时生成的文件较大,但支持CSS样式等,并进行了大量增强。支持几乎所有语言,包括RTL(阿拉伯语和希伯来语)和CJK(中日韩)。支持嵌套的块级元素(如P、DIV),

SublimeText3汉化版
中文版,非常好用

Dreamweaver Mac版
视觉化网页开发工具

EditPlus 中文破解版
体积小,语法高亮,不支持代码提示功能

安全考试浏览器
Safe Exam Browser是一个安全的浏览器环境,用于安全地进行在线考试。该软件将任何计算机变成一个安全的工作站。它控制对任何实用工具的访问,并防止学生使用未经授权的资源。