8.1. 概念差异

  • Go没有支持构造和析构的class类型,也没有继承和虚函数的概念。但是go提供接口interfaces 支持,我们可以把接口看作是C++中模板类似的技术。
  • Go提供垃圾内存回收支持。我们没有必要显式释放内存,go的运行时系统会帮我们收集垃圾内存。
  • Go中有指针,但是没有指针算术。因此,你不可能通过指针以字节方式来遍历一个字符串。 数组一个普通类型变量。当用数组作为参数调用函数时,将会复制整个数组。当然,Go语言中一般用切片 (slices)代替数组作为参数,切片是建立在底层数组地址之上的,因此传递的是数组的 地址。切片在后面会详细讨论。
  • 内建对字符串的支持。并且字符串创建后就不能修改。
  • 内建hash表支持,术语叫字典(map)。
  • 语言本身提供并发和管道通讯功能,细节在后面会讨论。
  • 有少数类型是通过引用传递(字典和管道,将在后面讨论)。也就是说,将字典传递给一个 函数不会复制整个字典,而且函数对字典的修改会影响到函数调用者的字典数据。这和C++中引用 概念类似。
  • Go不使用头文件。每个源文件都被定义在特定的包package中,在包中以大写 字母定义的对象(例如类型,常量,变量,函数等)对外是可见的,可以被别的代码导入使用。
  • Go不会作隐式类型转换。如果在不同类型之间赋值,必须强制转换类型。
  • Go不支持函数重载,也不支持运算符定义。
  • Go不支持const和volatile 修饰符。
  • Go使用nil表示无效的指针,C++中使用NULL或0 表示空指针。