范围或地图返回什么?

2024-01-18

Go 有非常简洁的多返回值范例。但看起来像v, ok := map[key] and v, k := range m使用具有相同符号的不同机制。这是一个简单的例子:

func f2() (k, v string) {
    return "Hello", "World"
}

func main(){
    k := f2() // Doesn't work : multiple-value f2() in single-value context

    m := map[string]int{"One": 1}

    // It works
    v, ok := m["One"]

    // How it all work?
    v := m["One"]
    for k := range m {}
}

在上面的例子中,k := f2()给出错误为f2返回两个值,而v, ok := m["One"] and v := m["One"]- 两个表达式都可以正常工作,没有任何错误。 为什么会有不同的行为?


从内置中获取map, using range在地图、数组或切片上,以及type assertions允许一个or两个变量。用户定义的函数和方法并非如此。如果函数声明两个返回值,则必须告诉如何处理这两个值,或者忽略这两个值:

k, _ := f2() // Specify what to do with each returned value
f2() // Ignoring both

为什么?因为规范是这样说的:

映射(索引表达式): http://golang.org/ref/spec#Index_expressions

map[K]V 类型的映射 a 上的索引表达式可以用于特殊形式的赋值或初始化

v, 好 = a[x]
v,好的:= a[x]
var v, ok = a[x]

其中索引表达式的结果是一对类型为 (V, bool) 的值。在这种形式中,如果键 x 存在于映射中,则 ok 的值为 true,否则为 false。 v 的值是单结果形式中的值 a[x]。

范围(用于声明): http://golang.org/ref/spec#For_statements

对于每次迭代,迭代值的生成如下:

极差表达式:m map[K]V
第一个值:键 k K
第二个值(如果存在第二个变量):m[k] V

类型断言: http://golang.org/ref/spec#Type_assertions

对于接口类型和类型 T 的表达式 x,主表达式
x.(T)
断言 x 不为 nil,并且存储在 x 中的值是 T 类型。

and

如果在表单的赋值或初始化中使用类型断言
v, ok = x.(T)
v, 好的 := x.(T)
var v, ok = x.(T)
断言的结果是一对类型为 (T, bool) 的值

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

范围或地图返回什么? 的相关文章

  • Redux Spread 运算符与 Map

    我有一个数组中的对象状态 在我的 ReduxReducer 中 const initialState items id 1 dish General Chicken price 12 1 quantity 0 id 2 dish Chick
  • python字典应该如何存储在pytables中?

    pytables 本身不支持 python 字典 我处理它的方法是创建以下形式的数据结构 tables dict key tables StringCol itemsize 40 value tables Int32Col 请注意 我确保键
  • 如何有效地计算 Perl 中覆盖给定范围的范围?

    我有一个大约 30k 范围的数据库 每个范围都作为一对起点和终点给出 12 80 34 60 34 9000 76 743 我想编写一个 Perl 子例程来表示一个范围 不是来自数据库 并返回数据库中完全 包含 给定范围的范围数 例如 如果
  • Python 中的“Zip”列表字典

    我有一个列表字典 我想将它们合并到一个命名元组列表中 我想要第一个元组中所有列表的第一个元素 第二个元组中的第二个元素 依此类推 Example key1 1 2 3 key2 4 5 6 key3 7 8 9 我希望生成的列表如下所示 k
  • 如何使用 mongo-go-driver 有效地将 bson 转换为 json?

    我想将 bson 转换为mongo go 驱动程序 https github com mongodb mongo go driver有效地转换为 json 我应该小心处理NaN 因为json Marshal失败如果NaN存在于数据中 例如
  • 如何从字典列表中查找键的值?

    如何从字典列表中获取给定键的值 mylist powerpoint color blue client name Sport Parents Regrouped sort order ascending chart layout 1 cha
  • Java 中的 HashMap 和 Map 对象有什么区别?

    我创建的以下地图之间有什么区别 在另一个问题中 人们似乎可以互换使用它们来回答 我想知道它们是否 如何不同 HashMap
  • 如何顺序运行 golang 测试?

    当我跑步时go test 我的输出 FAIL TestGETSearchSuccess 0 00s Location drivers api test go 283 Error Not equal 200 expected 204 actu
  • 在ansible中合并字典

    我目前正在构建一个使用 ansible 安装 PHP 的角色 并且在合并字典时遇到一些困难 我尝试了多种方法来做到这一点 但我无法让它像我想要的那样工作 A vars file my default values key value my
  • 无需时间即可生成随机字符串?

    我知道如何使用 Runes 和播种 rand Init 在 go 中生成随机字符串time UnixNano 我的问题是 是否可以 使用 stdlib 在不使用当前时间戳 安全 的情况下播种 rand 此外 我问 因为仅仅依靠时间来为敏感操
  • std::map 中包含 typedef 类型?

    在 C 中执行以下操作是个好主意吗 typedef std map
  • 分组为连续整数范围

    我检查了其他帖子 包括使用 Linq 按可变整数范围进行分组 https stackoverflow com questions 1375997 group by variable integer range using linq 但我没有
  • python csv按列转换为字典

    是否可以将 csv 文件中的数据读取到字典中 使得列的第一行是键 同一列的其余行构成列表的值 例如 我有一个 csv 文件 strings numbers colors string1 1 blue string2 2 red string
  • 我想在后端验证来自 golang 前端的时区

    前端在注册期间发送时区以及其他用户详细信息 我需要在时区上放置一个验证器来进行 api 测试 时区数据的格式为 GMT 10 00 Hawaii GMT 08 00 Pacific Time US amp Canada 我所做的是定义数组中
  • 了解字典的深度

    假设我们有这个字典 d a 1 b c 了解嵌套的最直接方法是什么depth of it 您需要创建一个递归函数 gt gt gt def depth d if isinstance d dict return 1 max map dept
  • CSV、Python:正确使用 DictWriter(ValueError:dict 包含不在字段名中的字段)

    我在掌握 csv 模块 Python 2 7 中的 DictWriter 时遇到困难 我有这个 哦 我正在使用 unicodecsv 库 因为我读到存在问题 f object instance return a dictionary key
  • 对 Python 中的嵌套字典进行排序

    我有以下字典 var a Black grams 1906 price 2 05 Blue grams 9526 price 22 88 Gold grams 194 price 8 24 Magenta grams 6035 price
  • Python,Bokeh:如何更改日期时间轴的范围

    我想使用按钮设置日期时间轴的范围 然而 该命令 f x range Range1d start start date end end date 不起作用 单击按钮时没有任何反应 无论是在运行 Bokeh 服务器的终端窗口中 还是在 Chro
  • Pandas 数据框可对多列和要列出的值进行字典

    我有一个数据框 id key a1 1 a2 1 a3 1 a4 2 a5 2 a6 3 我想创建一本字典key作为机器号 并且id列作为列表 like 1 a1 a2 a3 2 a4 a5 3 a6 我可以先使用 groupby 然后再使
  • java数据结构模拟数据树

    我需要帮助定义使用什么方法 我有一个 SOAP 响应 给我一个 xml 文件 我需要在屏幕上显示 3 个相关列表 当您在第一个列表中选择一个项目时 相应的选择将出现在第二个列表中 依此类推 我只对从 xml 流中提取数据后如何有效地组织数据

随机推荐

  • 如何在同一查询中使用 __year 和 __in ?

    这就是我正在尝试做的事情 例如 我有一个包含年份的列表years 2002 2003 2004 我有一个SomethingModel with a DateField 我想做一个查询 该查询将返回属于该年的所有对象 我知道这个作品 Some
  • 如何解决递归异步承诺?

    我正在玩弄承诺 并且在异步递归承诺方面遇到了麻烦 场景是一名运动员开始跑 100m 我需要定期检查他们是否完成 一旦完成 打印他们的时间 编辑以澄清 在现实世界中 运动员在服务器上运行 startRunning涉及对服务器进行 ajax 调
  • 声明一个克隆函数以使只读属性在 TypeScript 中可写?

    我只读了打字稿中的数据和clone功能 class Data readonly foo string const ro Data foo bar how to declare clone so that it returns writabl
  • 忽略 python 警告

    我想忽略所有UserWarning在我的开发环境中 这样它们就不会打印到我的错误日志文件中 我读过的文档warnings模块 并尝试了类似的东西 import warnings import the module that warns wa
  • 使用 AuthLogic 在 ROR 中创建会话后,Current_user nil

    我在 AuthLogic 和 current user 方面遇到一些问题 我有一个 Flex4 应用程序 使用 Cairngorm 框架作为前端 使用 Ruby On Rails 作为后端 我可以通过浏览器正常登录 并且仅使用 ROR 时
  • 在更改事件之前确定 jQuery Mobile 页面的调用者

    我认为这是同一个问题JQM pagebeforechange 和事件源 https stackoverflow com questions 9179096 jqm pagebeforechange and event source 但那里没
  • iOS Daemon 应用程序无法启动(越狱)- 如何调试?

    我正在为越狱的 iPhone 构建一个守护程序应用程序 并遵循 stackoverflow 上的几个问题和答案中描述的指导原则 当然还有 Chris Alvares 的网页 http chrisalvares com blog 38 cre
  • Spring MVC“重复”部分 URL

    我有一个简单的 Controller在一个spring mvc环境 这是控制器 Controller public class MessageController private static Logger LOG LoggerFactor
  • Quasar2 Vue3 Cypress 滑动切换状态与 Cypress 浏览器上显示的内容不匹配

    我的 vue 模板
  • 在 Angular 8 的新选项卡中打开 url 时如何使用状态传递数据

    在同一选项卡中打开网址时 我可以使用状态传递数据 我使用了以下代码片段 a click here a 但是 当我尝试使用 target blank 属性进行相同操作以在新选项卡中打开时 我无法从状态获取数据 a target blank c
  • ASP.NET MVC 3 最佳实践/设计

    我花了很多时间寻找使用 EF 4 1 或其他 ORM 设计 ASP NET MVC 3 网站的最佳实践 我找到了这个在 ASP NET MVC 应用程序中实现存储库和工作单元模式的教程 http www asp net mvc tutori
  • 如何清除绑定到 Google 地点自动完成的输入?

    这是我的问题 我正在使用 Google 地点自动完成功能从用户那里收集有关地点的信息 在事件 place changed 中 我保存此信息 不过 我想让用户可以添加多个位置 所以在保存这个地方后我想清除输入 但是 Google 自动完成功能
  • 修改foreach循环中的数组值[重复]

    这个问题在这里已经有答案了 我想知道是否可以编辑正在处理的当前对象foreach loop 我正在处理一系列对象 questions我想在我的数据库中浏览并查找与该问题对象相关的答案 因此 对于每个问题 获取答案对象并更新当前的 quest
  • 在显示表格单元格中使用边距[重复]

    这个问题在这里已经有答案了 我尝试在 li 中添加 margin left margin right 但它没有给它们之间留出空间 我应该添加什么来在列表之间留出一个空格 CSS btn top float right height 40px
  • Windows Azure 开发存储 Blob 服务未启动

    当我启动开发存储模拟器时 出现错误 The process cannot access the file because it is being used by another process 我猜这只发生在 BLOB 上 其他服务 即队列
  • 每次操作后的 MySQL SUM 和 MIN

    考虑以下表结构 Quantity BaseValue Id 0 3 1 1 0 8 1 2 0 5 1 3 0 2 1 4 假设这是一张表 名为Transactions 有什么方法可以对此表进行选择查询 它将对表中的值进行求和Quantit
  • Glibc 字符串操作函数的算法复杂度

    我意识到 Glibc 源代码经过了极其优化 并且是手工编码的汇编 是否有任何文档分析了常用字符串操作函数的算法复杂性 Big O 例如strmcp strncmp etc 可能没有这方面的文档 因为它很简单 其复杂度为 O n strcmp
  • 删除...创建与更改

    当涉及到创建存储过程 视图 函数等时 对对象执行 DROP CREATE 或 ALTER 哪个更好 我见过许多 标准 文档声称要执行 DROP CREATE 但我也见过许多提倡使用 ALTER 方法的评论和争论 ALTER 方法保留了安全性
  • 如何设置 HttpURLConnection 的内容类型?

    你知道如何设置吗Content Type on HttpURL连接 http developer android com reference java net HttpURLConnection html 以下代码适用于 Blackberr
  • 范围或地图返回什么?

    Go 有非常简洁的多返回值范例 但看起来像v ok map key and v k range m使用具有相同符号的不同机制 这是一个简单的例子 func f2 k v string return Hello World func main