这个数组init语法是什么意思?(带键的元素)

kop*_*zko 7 go

我最近发现了以下代码:

var noEscape = [256]bool{
    'A': true, true, true, true, true, true, true, true, true, true, true, true, true, true, true, true, true, true, true, true, true, true, true, true, true, true,
    'a': true, true, true, true, true, true, true, true, true, true, true, true, true, true, true, true, true, true, true, true, true, true, true, true, true, true,
    '0': true, true, true, true, true, true, true, true, true, true,
    '-': true,
    '.': true,
    '_': true,
    '~': true,
}
Run Code Online (Sandbox Code Playgroud)

据我所知,默认情况下,这[N]bool是用N false(零)初始化的.如果索引后跟冒号,则可以从索引(包括)中定义值.在哪里描述?哪些类型可以用作索引值(char示例中有一个)?

Jim*_*imB 6

对于数组或切片文字,索引值必须是常量.来自"复合文字"的文档

对于数组和切片文字,以下规则适用:

  • 每个元素都有一个关联的整数索引,标记其在数组中的位置.
  • 带键的元素使用键作为索引; 键必须是常量整数表达式.
  • 没有键的元素使用前一个元素的索引加一个.如果第一个元素没有键,则其索引为零.

示例中的文字字符是无类型常量,恰好被编写为单个符文文字.如果要将任何这些值分配给变量以用作索引,则代码将无法编译.