不一样的go语言-go缺少的语言特性

  相信很多从其他语言转向go语言的人,或者是几乎所有初学go语言的人(我相信目前还没有学校将go作为教学语言,所以未来的IT工程师的第一语言都不会是go),都会在学习的过程中将go与自己的第一语言、第二语言作比较,带着第一、第二语言的思维方式去学习go。同时会对go语言的一些看似“奇葩”的语法不解,这里我尝试向大家介绍go没有什么或者为什么没有。

语法篇

语法 示例(java) 说明
三元操作符 boolean a = 2 > 1 ? true : false 这个有太多的讨论, 我也始终未能认同官方的观点。或许未来会在go2.0中加入新的语法来实现
自增、自减 i++, i-- go认为自增、自减是一个语句而不是一个表达式, 所以a := i++ 不合法。作为语句,单独使用i++则合法, 但 ++i 不合法。语句与表达式的区别在于表达式可以求值,而语句不行。
逻辑右移 2>>>1 即无符号右移
泛型 Set s = new HashSet<>(8) go2.0计划加入泛型支持
union - c语言的联合
class public class A 类, go使用struct实现面向对象
extend class A extends B 继承, go采用鸭子类型的方式实现继承
多线程 new Thread() go使用协程
函数重载 同名方法,参数不同(方法签名不同) 即overload,但go不支持,go2.0中有新的提案提及,但我不看好,重载虽然可以提高生产力,但确实会带来复杂性
函数重写 父子类继承时,重写父类方法 即overide,go使用的是组合继承,任何方法的调用方都是明确的。

数据结构篇

数据结构 示例(java) 说明
集合 Set s = new HashSet<>(8) 需要自行实现,反倒go提供了list、heap、ring的实现

  除了上述go没有的语言特性之外,go拥有的语言特性包括切片(又叫元组或切片)、多返回值、复数、协程、通道等。

欢迎关注个人公众号

不一样的go语言

原文地址:https://www.cnblogs.com/laud/p/go_spec.html