golang为[z] [y] [x] int定义数组int [x] [y] [z]有什么好处?

时间:2014-07-07 12:03:03

标签: java c# c++ syntax go

我刚开始学习golang的一些基本知识,在查看数组定义语法时对我来说有点奇怪。

C ++ / C#/ Java都定义了多维数组,如:

int arr[X][Y][Z]; // C/C++
int[,,] arr = new int[X, Y, Z]; // C#
int[][][] multi = new int[X][Y][Z]; // Java

在go:

var arr [Z][Y][X]int32 // go

语法有什么优势?

2 个答案:

答案 0 :(得分:7)

C#和Java的语法都受到C的启发,并继承了C语法的所有怪癖。关于Go has a different syntax

的原因有一篇很好的文章
  

Go语法

     

C系列之外的语言通常使用不同的类型语法   声明。虽然它是一个单独的点,但通常会出现这个名称   首先,通常后跟冒号。因此,上面的例子变成了   类似的东西(用虚构但说明性的语言)

x: int
p: pointer to int
a: array[3] of int
     

这些声明很清楚,如果详细 - 你只需要将它们读到   对。 Go从这里开始,但为了简洁起见   删除冒号并删除一些关键字:

x int
p *int
a [3]int
     

[3]int的外观和方式之间没有直接的对应关系   在表达式中使用a。 (我们将在接下来回过头来指点   部分。)您可以通过单独的语法来获得清晰度。

答案 1 :(得分:2)

此类variable declarationvar)的另一个方面是它被初始化为 zero value

  

这种初始化是递归完成的,因此,例如,如果没有指定值,则结构数组的每个元素都将其字段归零。

declaration is "backward" (coming from C)

  

在C中,概念是变量被声明为表示其类型的表达式,这是个不错的主意,但是类型和表达式语法不能很好地混合,结果可能会令人困惑;考虑函数指针。

     

Go主要分离表达式和类型语法,这简化了事情(使用前缀*作为指针是证明规则的例外)