返回介绍

index 表达式

发布于 2024-10-12 12:51:51 字数 1453 浏览 0 评论 0 收藏 0

主要表达式格式:

a[x]

可以表示数组元素、数组的指针、切片、字符串或 map 类型 a 索引 x 对应的值。x 称作索引或者 map 的键。遵循以下规则:

如果 a 不是 map 类型:

  • 索引 x 必须是整型或无类型常量。

  • 常量索引必须是非负数且可以使用 int 类型表示。

  • 无类型的常量索引会作为 int 型的值。

  • 索引 x 的范围在 0<=x<len(a) 内,否则就是越界。

对于数组类型 A:

  • 常量索引必须在合法范围内。

  • 如果 x 在运行时越界会引起运行时恐慌。

  • a[x] 表示数组在索引 x 处的元素。 a[x] 的类型就是 A 的元素类型。

对于数组的指针类型:

  • 可以使用 a[x] 表示 (*a)[x]

对于切片类型 S:

  • 如果 x 在运行时越界会引起运行时恐慌。
  • a[x] 表示切片在索引 x 处的元素。 a[x] 的类型就是 S 的元素类型。

对于字符串类型:

  • 如果字符串 a 为常量,那么常量索引必须在合法范围内。

  • 如果 x 在运行时越界会引起运行时恐慌。

  • a[x] 表示索引 x 处的非常量字节,它是 byte 类型。

  • 不能对 a[x] 分配值。

对于 map 类型 M:

  • 必须保证 x 的类型能够给 M 的键分配值。

  • 如果 map 包含键为 x 的值,a[x] 就是 map 中键 x 对应的值,它的类型就是 M 的元素类型。

  • 如果 map 值为 nil 或不包含这个实体,那么 a[x] 为 M 元素类型的零值。

否则 a[x] 就是非法的。

基于 map[K]V 类型 a 的索引表达式可以使用特殊格式的赋值和初始化语法。

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

它会额外生成一个无类型的布尔值。如果 ok 是 true,那么代表在 map 中有该键,如果没有 ok 为 false。

给一个值为 nil 的 map 类型变量赋值会导致运行时恐慌。

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。
列表为空,暂无数据
    我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
    原文