go语言胡思乱想 第一章

246 阅读4分钟

Go 语言概述

“Go 是一种开源的程序设计语言,它意在使得人们能够方便地构建简单,可靠,高效的软件”(来自Go官网 golang.org)

Go 是从2007年末由Robert Griesemer, Rob Pike, Ken Thompson主持开发,后来还加入了Ian Lance Taylor, Russ Cox等人,并最终于2009年11月开源,在2012年早些时候发布了Go 1稳定版本。现在Go的开发已经是完全开放的,并且拥有一个活跃的社区。

这是一个由计算机领域 “发明之父” 所组成的黄金团队,他们对系统编程语言,操作系统和并行都有着非常深刻的见解.

Go 的并发机制使编写能够充分利用多核和联网机器的程序变得容易,而其新颖的类型系统可实现灵活的模块化程序构建。

Go 快速编译到机器代码,并且拥有内存回收的便利性和运行时反射的强大功能。它是一种快速,静态类型的编译语言,感觉就像一种动态类型的解释语言。

Go被称为“类C语言”或“21世纪的C”

Go 语言的用途

Go 语言被设计成一门应用于搭载 Web 服务器,存储集群或类似用途的巨型中央服务器的系统编程语言。

对于高性能分布式系统领域而言,Go 语言无疑比大多数语言有着更高的开发效率。它提供了简单的并行程序开发机制。

Go 语言作为服务器编程语言,很适合处理日志,文件系统,分布式系统,网络代理等;在网络编程方面,Go广泛用于web开发,Restful Api开发等;除此之外,Go语言还适用于数据库和云平台领域,目前国外很多云平台都是采用Go开发

采用go开发的国内企业:阿里云,百度,小米,七牛,PingCAP,华为,bilibili等公司。

Go 语言的目标

Go 语言的主要目标是将静态语言的安全性和高效性与动态语言的易开发性进行有机结合,达到完美平衡,从而使编程变得更加有乐趣,而不是在艰难抉择中痛苦前行。

Go 语言的另一个目标是对于网络通信、并发和并行编程的极佳支持,从而更好地利用大量的分布式和多核的计算机,这一点对于谷歌内部的使用来说就非常重要了。设计者通过 goroutine 这种轻量级线程的概念来实现这个目标,然后通过 channel 来实现各个 goroutine 之间的通信。他们实现了分段栈增长和 goroutine 在线程基础上多路复用技术的自动化。

这个特性显然是 Go 语言最强有力的部分,不仅支持了日益重要的多核与多处理器计算机,也弥补了现存编程语言在这方面所存在的不足。

Go 语言缺少的特性

许多能够在大多数面向对象语言中使用的特性 Go 语言都没有支持,但其中的一部分可能会在未来被支持。

为了简化设计,不支持函数重载和操作符重载
为了避免在 C/C++ 开发中的一些 Bug 和混乱,不支持隐式转换
Go 语言通过另一种途径实现面向对象设计来放弃类和类型的继承
尽管在接口的使用方面可以实现类似变体类型的功能,但本身不支持变体类型
不支持动态加载代码
不支持动态链接库
不支持泛型
通过 recover 和 panic 来替代异常机制
不支持静态变量

第一个Go程序

接下来我们来编写第一个Go程序 main.go(Go 语言源文件的扩展是 .go)

package main

import "fmt"

func main(){
	fmt.Println("Hello,Go!")
}

要执行Go语言代码可以使用 go run 命令.

执行以上代码输出:

$go run main.go
Hello,Go!

参考资料

【Go语言教程】http://www.runoob.com/go/go-tutorial.html
【Go入门指南】https://github.com/Unknwon/the-way-to-go_ZH_CN
【Go语言程序设计】(书籍)

更多文章分享,扫描二维码关注一波吧! ^_^