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

时间:2015-12-31 13:57:47

标签: 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,
}

我了解默认情况下,此[N]bool初始化为N false(零)。如果索引后跟冒号,则可以从索引(包括)中定义值。在哪里描述?哪些类型可以用作索引值(示例中有char)?

1 个答案:

答案 0 :(得分:6)

对于数组或切片文字,索引值必须是常量。来自"composite literals"

上的文档
  

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

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

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