Go语言学习教程之声明语法(译)

2019-11-10 11:25:53王旭

类型和表达式的语法的不同点使得在 Go 中编写和调用闭包是那么的简单:

sum := func(a, b int) int { return a + b } (3, 4)

指针

指针这家伙总是表现得“与众不同”一点。观察下数组和切片,举个例子,Go 的类型语法将方括号放在类型的左边,但是赋值表达式语法却是将其放在表达式的右边:

var a []int
x = a[1]

为了让大家有一种熟悉的感觉,Go 的指针同样延续 C 语言中的 * 符号,但是我们不能简单的将指针类型也反转一下。所以指针使用方式如下:

var p *int
x = *p

我们不能简单粗暴地改成这样:

var p *int
x = p*

因为后缀 会与乘法的 相混淆。那或许我们可以使用 ^,举个例子:

var p ^int
x = p^

但同样的这个符号也已经有其他含义了,类型和表达式在前缀后缀的问题上总是在许多方面使事情复杂化。举个例子,

[]int("hi")

这是一种写法,但一旦以 * 打头就必须用括号将其包住:

(*int)(nil)

如果我们愿意放弃 * 作为指针语法,那么这些括号就不是必要的了。(译者注:但还能有更好的指针语法吗。。。)

所以 Go 的指针语法与熟悉的 C 语言是类似的,但这个关联也意味着我们不得不使用括号来消除语法中的类型和表达式之间的差异。

总体而言,我们相信 Go 的类型语法比 C 的要更容易理解,尤其是当事情变得复杂的时候。

关于Go语言为何要采用这种倒序语法呢?

Go的设计者Rob Pike的一篇介绍Go声明语法的文章给出了答案,其中谈到了Go声明语法的设计考量。

总结

以上就是这篇文章的全部内容了,希望本文的内容对大家的学习或者工作具有一定的参考学习价值,如果有疑问大家可以留言交流,谢谢大家对易采站长站的支持。