语言特色总结
大约 3 分钟
语言特色总结
与其他语言不同 的点
Go 就像 C/C++ 混合 TypeScript/Python 的版本,像 js 更多一些
特点:
- 语法特点
- 简洁
- 一个实现只有一种写法
- 性能特点
简洁原则优于单一写法原则 (吐槽)
Linc:吐槽:
若 “一种写法” 与 “简洁” 冲突,则语言委员那边似乎更倾向于 “简洁”,即他们会通过增加语法与语法糖达到简洁目的而忽略 “一种写法” 原则。 并且哪怕语法糖的目的只能多省略两个符号(他们或许认为 “简洁” 最直观的体现是少敲点键盘,而不是语法统一性,这点我不太认可)
我感觉这一点非常不好 —— 就为了两个符号就额外多一种语法。反观 Java 中有一个观点我比较喜欢:
Java设计者很长时间以来一直拒绝增加这个特性 (传递代码段)。Java非常重视其简单性和一致性。 他们认为如果只要一个特性能够让代码稍简洁一些,就把这个特性增加到语言中,这个语言很快就会变得一团糟,无法管理。
_
(必须省略的那种不在该吐槽范围内,本次主要吐槽的是:为两个符号而新增一种语法的情况) (不是一股脑不让省略,一部分我认可,一部分我认为没必要省,一部分我认为既然给了新语法也应该删除旧语法,维护单一写法语法原则)
举例:
- 可省略
- 省略分号:收益1个键,但高频操作
- :=写法:
i int := 1
比var i int = 1
少3个字符,收益2个键,再考虑键位则实际收益0 - 可省略():少2字符,收益3个键,如单函数返回值
- for死循环省略两分号:收益2个键
- 批量导入:少写若干
import
,收益 (4+6*n, n>=-1) 键。官方建议总是用批量写法 - 批量声明
- 取地址和取值运算符省略:Go的底层编译器做了优化,会自动加上
&
和*
,即可以省略这些。个人觉得这是个垃圾设计,违背单一写法和原理问题,不如编译报错。少1或3字符,收益2或4个键(*o).data
等同o.data
(&o).fn()
等同o.fn()
- 必须省略
- 省略():少2字符,收益3个键
- case省略break:收益5键 (必须省略),if及for的括号
- 无省略但多出来的语法
- break标签、continue标签
- 减少的语法
- 取消在表达式中使用 i++ 和 ++i
其他
Go有一个很别扭的地方,首先类型后置这点我是习惯的,TypeScript写得多。但 *
和 []
符号在类型的前面这点我真的不适应
// C
int list[5];
int* ptr;
// TypeScript
let list: int[5]
// Go
var list [5]int
var ptr *int
_
忽略的用法我感觉不错,可能优化起来也比较好