范围或地图返回什么?

杰恩蒂·卡纳尼(Jaynti Kanani)

Go具有非常整洁的多个返回值范例。但是它看起来v, ok := map[key]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()给出error作为f2返回两个值,而v, ok := m["One"]v := m["One"]-这两个表达式都正常工作。为什么会有不同的行为?

八角

在地图,数组或切片上map使用内建的获取range,并且还type assertions允许一个两个变量。用户定义的函数和方法不是这种情况。如果一个函数声明了两个返回值,则必须告诉它们如何处理这两个返回值,或者忽略这两个值:

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

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

映射(索引表达式):

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

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

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

范围(用于声明):

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

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

类型断言:

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

如果在类型
v的赋值或初始化中使用类型声明,则ok = x。(T)
v,ok:= x。(T)
var v,ok = x。(T)
,声明的结果为a一对类型(T,布尔值)的值

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

为什么地图不返回其值?

来自分类Dev

计算给定范围和地图大小,fitBounds()返回的视口

来自分类Dev

返回地图

来自分类Dev

unordered_map:如果密钥不在地图中,返回什么?

来自分类Dev

unordered_map:如果密钥不在地图中,返回什么?

来自分类Dev

为什么我的地图片段返回null?

来自分类Dev

为什么openlayers在地图点击时返回投影坐标?

来自分类Dev

为什么我的地图函数返回视图不起作用?

来自分类Dev

获取地图的视图范围

来自分类Dev

获取地图的视图范围

来自分类Dev

我应该返回什么StatusCode超出范围的参数

来自分类Dev

为什么此范围查询返回空结果?

来自分类Dev

在Google地图半径范围内的MySQL位置搜索-为什么我得到的距离错误?

来自分类Dev

为什么超出地图范围时3D游戏玩家角色会开始变形?

来自分类Dev

为什么将对象作为指针传递但不在返回范围时超出范围

来自分类Dev

从地图检查范围的最佳方法

来自分类Dev

如何使地图超出图层范围?

来自分类Dev

操作列表以返回地图

来自分类Dev

从地图函数返回组件

来自分类Dev

地图函数返回是否

来自分类Dev

从setIn返回地图-ImmutableJS

来自分类Dev

从地图返回值

来自分类Dev

Xquery返回地图列表而不是地图

来自分类Dev

地图地图在jQuery中返回平面数组

来自分类Dev

Xquery返回地图列表而不是地图

来自分类Dev

使用Haskell范围:为什么跨范围映射浮点函数会导致它返回额外的元素?

来自分类Dev

什么是地图图块?

来自分类Dev

返回对象和范围

来自分类Dev

AngleSharp返回范围ID