go 作为一门相对年轻的语言是在 2009 年由 Ken Thompson 和 Robert Griesemer 共同在 Google 孵化出来的。go 在许多方面都是可以看到 c 和 c++ 的影子。
Ken Thompson 参与了开发 unix,而且
Thompson 也参与 c 语言开发。(下图)
- 编译为机器码
- 垃圾回收
- 协程(goroutine)
- 用于线程同步的通道(channels)
- 静态类型
- 没有类或类型的继承
- 通过接口定义关系
go 作为一门高级语言有自己垃圾回收,因此 go 语言不算上是一门可以写出高效的低级语言。所有 golang 并不适合开发操作操作系统和大型游戏。
go 语言在处理线程同步和并发上下了很多功夫,为此设计出来 goroutine 和 channel。这些特点让我们可以看出 golang 是一门服务端的语言。除此外 go 语言还适合写一些脚本。
go 语言作为一门静态语言,不想 python 和 ruby 有类型转换的负担。在 go 语言中没有面向对象思想也没有类的概念。go 语言依据 interface 的结构为 ad-hoc(点对点)关系。通过接口定义一些方法和类型,避免创建复杂和类型的情况发生。
变量声明
var foo string;
foo = "hello" //ok
foo = 5 // 编译错误
与 JavaScript 语言差不多,通过 var 关键字定义变量。然后 foo 类型定义为 string。作为一门静态语言,必须为变量声明类型。
var foo = "hello" //
foo = 5 // 编译错误
如果声明变量时没有特殊指定类型,go 会根据变量的赋值类型来确定变量 foo 的类型,所以随后再为 foo 赋值为 5,就会报出类型错误。
foo := "hello" // 隐式声明
foo = 5 // 编译错误
有疑问加站长微信联系(非本文作者)