Go语言的诞生背景

G0语言的诞生主要基于如下原因:

  1. 摩尔定律接近失效后多核服务器已经成为主流,当前的编程语言对并发的支持不是很好,不能很好地发挥多核CPU的威力。
  2. 程序规模越来越大,编译速度越来越慢,如何快速地编译程序是程序员的迫切需求。
  3. 现有的编程语言设计越来越复杂,由于历史的包袱,某些特性的实现不怎么优雅,程序员花费了更多的精力来应对编程语法细节而不是问题域。

G0语言就是为了解决当下编程语言对并发支持不友好、编译速度慢、编程复杂这三个问题而诞生的。

Go语言特性

特性集合

特性项

Go

C

Java

基础语法

关键字和保留字

25个

ANSI32个

大于48个

控制结构

支持顺序、循环、分支

支持顺序、循环、分支

支持顺序、循环、分支

类型系统

动、静特性

静态语言,支持运行时动态类型

静态语言

静态语言

强、弱特性

强类型

弱类型

强类型

隐式类型推到

支持



类型安全

类型安全

非类型安全

类型安全

自定义数据类型

支持type自定义

struct

通过类/接口实现自定义类型和行为

抽象

函数

支持

支持

支持

面向对象支持

类型组合支持面向对象

struct内嵌函数指针支持

类/接口

接口

Duck模型

void*间接支持

显式声明

多态

通过接口支持

void*间接支持

接口及继承关系支持

元编程

泛型支持




反射支持




平台和运行模式

编译模式

编译成可执行程序

编译成可执行程序

编译成字节码

运行模式

直接运行

直接运行

虚拟机加载执行

内存管理

支持自动垃圾回收

手动管理

支持自动垃圾回收

并发支持

协程(语言原生支持)

OS线程(库支持协程)

Java线程(JVM内部映射到OS线程)

交叉编译

支持

支持

中间代码无交叉编译必要

夸平台

支持

支持

原生跨平台

语言软实力

标准库和第三方

丰富,发展很快

很丰富

很丰富

框架

丰富,发展很快

很丰富

很丰富

语法兼容性

向前兼容性好

向前兼容性好

向前兼容性好

影响力

社区活跃,Google背书

40多年宝刀未老

社区活跃

应用领域

云计算基础设施软件、中间件、区块链

OS及系统软件

企业级应用/大数据/移动端

第一个Go程序

package main

import "fmt"

func main() {
	fmt.Println("Hello world!\n")
}

程序功能解读:

  1. 第1行定义一个包,包名为main,main是可执行程序的包名,所有的Go源程序文件头部必须有一个包声明语句,Go通过包来管理命名空间。
  2. 第3行import引用一个外部包fmt,可以是标准库的包,也可以是第三方或自定义的包,fmt是标准输入/输出包。
  3. 第5行使用func关键字声明定义一个函数,函数名为main,main代表Go程序入口函数。
  4. 第6行调用fmt包里面的Printf函数,函数实参是一个字符串字面量,在标准输出里面打印一句话“Hello world!\n”,\n是一个转义符,表示换行。

Go源代码的特征解读:

  • 源程序以.go为后缀。
  • 源程序默认为UTF-8编码。
  • 标识符区分大小写。
  • 语句结尾的分号可以省略。
  • 函数以func开头,函数体开头的“{”必须在函数头所在行尾部,不能单独起一行。
  • 字符串字面量使用““””(双引号)括起来。
  • 调用包里面的方法通过点“.”访问符,比如示例中的fmt.Printf。
  • main函数所在的包名必须是main。

编译运行:

//编译
go build hello.go

//运行
./hello
Hello world!