如何在 Golang 中使用接口与地图?

     2023-02-18     153

关键词:

【中文标题】如何在 Golang 中使用接口与地图?【英文标题】:How to use interface with map in Golang? 【发布时间】:2022-01-13 17:38:24 【问题描述】:

我有一个实现接口的结构 - 因此我可以将该结构分配给所述接口的变量。

但我想创建一个从 string -> Whoa 接口映射的类型,但在初始化时能够使用具体的结构。这不起作用,我得到:

不能在变量声明中使用 (map[string]Boom literal) (map[string]Boom 类型的值) 作为 poppa 值

任何帮助表示赞赏!

package main

type Whoa interface 
    yes()


type Boom struct 
    hey string


func (b Boom) yes() 



type poppa map[string]Whoa

func main() 
    var thisWorks Whoa = Boom
    var thisDoesnt poppa = map[string]Boom

【问题讨论】:

您不能将具体类型为map[string]Boom 的值赋给具体类型为poppa 的变量(map[string]Whoa)。映射值在内存中具有不同的表示形式。编写代码将map[string]Boom 复制到poppa 【参考方案1】:
    var thisWorks Whoa = Boom

这是因为 Boom 实现了 Whoa

你可能会想既然Boom实现了Whoa,那么map[string]Boom也可以是map[string]Whoa。但它不能。

可以做的是创建一个map[string]Whoa,其值为Booms。

    var thisShould poppa = map[string]Whoa"first": Boom

故事的寓意是,接口类型的切片和映射可以保存满足该接口的任何值,但满足接口的类型的切片和映射不等同于该接口的切片和映射 em>。

编写代码将地图[string]Boom复制到poppa

如果您想将 map[string]Boom 转换为 map[string]Whoa,正确的做法是:

whoas := make(map[string]Whoa)
for k, v := map[string]Boom 
  whoas[k] = v

【讨论】:

关于地图在golang编程语言(代码片段)

我找到了代码newMap:=map[string]interface"string1":1,"string2":"hello","string3":map[string]string"hello":"hellothere"我的猜测是,如果我们使用mapforinterface作为值类型,那么我们可以将任何类型的值插入值,是否正确?答案实际上,它与地图没有任何... 查看详情

如何在 Go (Golang) 中检索表单数据作为地图(如 PHP 和 Ruby)

】如何在Go(Golang)中检索表单数据作为地图(如PHP和Ruby)【英文标题】:Howtoretrieveform-dataasmap(likePHPandRuby)inGo(Golang)【发布时间】:2016-04-2217:50:44【问题描述】:我是一名PHP开发人员。但目前正在迁移到Golang...我正在尝试从Form(Po... 查看详情

为啥 Golang 需要接口?

...方法,如果我们想在一个结构上实现一个方法,我们无论如何都要在另一个结构下再次编写它。这意味着接口似乎只是方法定义,只是在我们的页面 查看详情

golang在任何类型中使用接口返回类型(代码片段)

查看详情

使用带有 golang 和数据库抽象的接口

...时间】:2018-04-0417:08:46【问题描述】:我正在尝试弄清楚如何在Go中构建数据存储抽象。我想我了解接口的基础知识。但是,我遇到的问题是网上所有的例子都只给你展示了最简单的情况,没有其他的。我要做的是弄清楚如何以... 查看详情

Golang YAML 使用地图读取

...aml.v1包来阅读这个更扁平的版本,但我一直在试图弄清楚如何在这个YAM 查看详情

golang使用接口和类型断言在go中使用任意键名解析json对象(代码片段)

查看详情

遍历 golang 地图

...yml文件反序列化之后)mymap=map[foo:map[first:1]boo:map[second:2]]如何遍历此地图?我尝试了以下方法:fork,v:=rangemymap 查看详情

如何与 Golang 使用共享内存? [关闭]

】如何与Golang使用共享内存?[关闭]【英文标题】:howtousesharememorywithGolang?[closed]【发布时间】:2015-06-0809:22:09【问题描述】:golang如何共享或读取其他进程共享内存?我查了一些资料,但没有找到相关资料。谁能举个例子?【... 查看详情

如何在 C++ 语言中将谷歌地图 API 与 MFC 或 QT 一起使用?

】如何在C++语言中将谷歌地图API与MFC或QT一起使用?【英文标题】:HowtousegooglemapAPIwithMFCorQTinc++language?【发布时间】:2018-04-2108:27:54【问题描述】:我有一个问题,如何在我的开发程序中使用googlemapapi。我的程序在VisualStudio2017环... 查看详情

如何在golang中使用LDFLAGS的相对路径

】如何在golang中使用LDFLAGS的相对路径【英文标题】:HowtousearelativepathforLDFLAGSingolang【发布时间】:2015-03-1805:42:06【问题描述】:我正在尝试构建一个使用静态库(.a文件)的golang程序我的项目的目录结构如下└─testserver├─bin... 查看详情

在 Golang 中合并地图

】在Golang中合并地图【英文标题】:MergeMapsinGolang【发布时间】:2018-10-2318:38:49【问题描述】:我需要合并多个映射map1=[id:id_1val:val_1]、map2=[id:id_2val:val_2]和map3=[id:id_1,val:val_3],以便结果映射应合并到id值上:result_map=[id:id_1val:val_1... 查看详情

如何将 SWIG 用于 STL 地图?

】如何将SWIG用于STL地图?【英文标题】:HowtoUseSWIGforSTLMaps?【发布时间】:2016-05-2504:41:41【问题描述】:我将SWIG与ruby​​一起使用。我们可以使用SWIG为Map生成包装器%include<std_map.i>%template(IntMap)std::map<int,int>;这个在接口... 查看详情

在 golang 中如何使用切片进行复制? [关闭]

】在golang中如何使用切片进行复制?[关闭]【英文标题】:Howdoescopywithslicesworkingolang?[closed]【发布时间】:2021-09-1100:58:21【问题描述】:我有一个切片,我使用copy方法将切片复制到另一个切片,我不确定如何获得以下程序的以下... 查看详情

golang接口的使用(练习一)(代码片段)

...接口要求的所有函数,我们就说这个类实现了这个接口。golang接口赋值实现方式一:将对象实例赋值给接口packagemainimport"fmt"//定义一个Animal接口,实现飞和跑的功能typeAnimalinterfaceFly()Run()//定义一个Bird类typeBirdstruct//通过类实现接... 查看详情

golang接口---中(代码片段)

GoLang接口---中引言接口的类型断言实例演示类型判断:type-switchnil和non-nil空接口构建通用类型或包含不同类型变量的数组复制数据切片至空接口切片通用类型的节点数据结构接口到接口参考引言GoLang接口—上上一篇文章中... 查看详情

在 Golang 的 HTML 模板中使用 Vue.js [重复]

...们相互冲突......是否有人已经以某种方式做到了,或者对如何重叠这个问题有任何建议?提前致谢。【问题讨论】:【参考方案 查看详情

如何使用golang在clickhouse中使用一个命令插入csv文件

】如何使用golang在clickhouse中使用一个命令插入csv文件【英文标题】:Howtoinsertcsvfileusingonecommandinclickhouseusinggolang【发布时间】:2022-01-2200:48:02【问题描述】:有没有办法在一个命令中使用这个golibraryhttps://github.com/ClickHouse/clickhous... 查看详情