GO特点
1. 静态型编译型
2. 自带垃圾回收
3. 适合并发编程
4. 风格类似于C
5. goroutine:类似线程但并非线程
简单上手
简单实现一个HTTP服务
// httpServer.go
package main
import "net/http"
func main() {
http.Handle("/", http.FileServer(http.Dir(".")))
http.ListenAndServe(":8080", nil)
}
启动httpserver
$ go run httpServer.go
浏览器访问 `http://127.0.0.1:8080` 即可浏览
编译可执行文件
Go不使用虚拟机,只有运行时(runtime)提供垃圾回收和goroutine调度。Go使用自己的链接器,不依赖任何系统提供的编译器、链接器,因此编译出的可执行文件可以直接运行在几乎所有的操作系统和环境中。
插曲:Go1.5以后实现自举,实现了使用Go编写Go编译器以及所有工具链的功能。
go版本的Hello World
// helloWorld.go
package main
import "fmt"
func main() {
fmt.Println("hello world")
}
编译成可执行文件:
$ go build helloWorld.go
执行hello world的可执行文件即可看到“hello world”。
Go不仅可以输出可执行文件还可以编译输出能导入C语言的静态库、动态库。
Go1.7之后Go支持编译为插件,使用插件可以动态的加载模块。
工程结构
无须头文件、无须解决方案、工程文件和Make File,只需要按照GOPATH规则进行填充,就可以使用`go build/go install`进行编译
编译速度快
并发编译,最小并发编译元素是包。Go1.9以后最小编译元素缩小到函数,编译速度在提升20%。
PS:语法简单,严谨的工程结构设计,没有头文件,不允许交叉依赖等规则加速了编译过程
高性能
大部分场景优于JAVA,原生支持并发,实际应用场景,多数情况下优于JAVA
原生支持并发
Go在语言层支持并发,无须第三方库、开发者的编程技巧及开发经验就可以轻松帮助开发者决定怎么使用CPU资源
性能分析
使用Go语言工具链可以直接进行Go代码的性能分析
强大的标准库
Go的标准库覆盖网络、系统、加密、编码、图形等各个方面。
代码风格简单、清晰