加入收藏 | 设为首页 | 会员中心 | 我要投稿 核心网 (https://www.hxwgxz.com/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 建站 > 正文

Go语言的奇特语法,你怎么看?

发布时间:2019-04-24 22:30:00 所属栏目:建站 来源:itworld123
导读:刚开始接触Go语言的同学觉得Go语言的语法很特别,尤其是使用C/C++或者Java等语言的同学。比如在C等语言中定义变量的时候类型是在名称前面,而Go语言偏偏要将类型放在变量名称后面,觉得很奇怪等等。下面是原文,对这些奇怪的语法给出了相对官方和靠谱的解

如果此时把参数名去掉,它还是很清楚——因为参数名总在类型的前面,所以不会引起混淆。

  1. func main(int, *[]byte) int 

这种自左向右风格的声明的一个价值在于,当类型变得更复杂时,它依然相对简单。下面是一个函数变量的声明(相当于 C 语言里的函数指针)

  1. f func(func(int,int) int, int) int 

或者当它返回一个函数时:

  1. f func(func(int,int) int, int) func(int, int) int 

上面的声明读起来还是很清晰,自左向右,而且究竟哪一个变量名是当前被声明的也容易看懂——因为变量名永远在首位。

类型语法和表达式语法带来的差别使得在 Go 语言里调用闭包也变得更简单:

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

指针有些例外。注意在数组 (array )和切片 (slice) 中,Go 的类型语法把方括号放在了类型的左边,但是在表达式语法中却又把方括号放到了右边:

  1. var a []int 
  2. x = a[1] 

类似的,Go 的指针沿用了 C 的 * 记法,但是我们写的时候也是声明时 * 在变量名右边,但在表达式中却又得把 * 放到左左边:

  1. var p *int 
  2. x = *p 

不能写成下面这样

  1. var p *int 
  2. x = p* 

因为后缀的 * 可能会和乘法运算混淆,也许我们可以改用 Pascal 的 ^ 标记,像这样

  1. var p ^int 
  2. x = p^ 

我们也许还真的应该把 * 像上面这样改成 ^ (当然这么一改 xor 运算的符号也得改),因为在类型和表达式中的 * 前缀确实把好些事儿都搞得有点复杂,举个例子来说,虽然我们可以像下面这样写

  1. []int("hi") 

但在转换时,如果类型是以 * 开头的,就得加上括号:

  1. (*int)(nil) 

如果有一天我们愿意放弃用 * 作为指针语法的话,那么上面的括号就可以省略了。

可见,Go 的指针语法是和 C 相似的。但这种相似也意味着我们无法彻底避免在文法中有时为了避免类型和表达式的歧义需要补充括号的情况。

总而言之,尽管存在不足,但我们相信 Go 的类型语法要比 C 的容易懂。特别是当类型比较复杂时。

【责任编辑:庞桂玉 TEL:(010)68476606】
点赞 0

(编辑:核心网)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

热点阅读