跳至主要內容

语言特色总结

LincZero大约 3 分钟

语言特色总结

与其他语言不同 的点

Go 就像 C/C++ 混合 TypeScript/Python 的版本,像 js 更多一些

特点:

  • 语法特点
    • 简洁
    • 一个实现只有一种写法
  • 性能特点

简洁原则优于单一写法原则 (吐槽)

Linc:吐槽:

若 “一种写法” 与 “简洁” 冲突,则语言委员那边似乎更倾向于 “简洁”,即他们会通过增加语法与语法糖达到简洁目的而忽略 “一种写法” 原则。 并且哪怕语法糖的目的只能多省略两个符号(他们或许认为 “简洁” 最直观的体现是少敲点键盘,而不是语法统一性,这点我不太认可)

我感觉这一点非常不好 —— 就为了两个符号就额外多一种语法。反观 Java 中有一个观点我比较喜欢:

Java设计者很长时间以来一直拒绝增加这个特性 (传递代码段)。Java非常重视其简单性和一致性。 他们认为如果只要一个特性能够让代码稍简洁一些,就把这个特性增加到语言中,这个语言很快就会变得一团糟,无法管理。

_

(必须省略的那种不在该吐槽范围内,本次主要吐槽的是:为两个符号而新增一种语法的情况) (不是一股脑不让省略,一部分我认可,一部分我认为没必要省,一部分我认为既然给了新语法也应该删除旧语法,维护单一写法语法原则)

举例:

  • 可省略
    • 省略分号:收益1个键,但高频操作
    • :=写法:i int := 1var 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

_ 忽略的用法我感觉不错,可能优化起来也比较好