Go语言是谷歌2009发布的第二款开源编程语言。是从B语言、C语言逐步演化过来的,是C语言家族成员,因此很多人将Go语言称为21世纪的C语言。现如今Go语言已经成为云计算、云存储时代最重要的基础编程语言(摘自Go语言圣经)。
Go语言专门针对多处理器系统应用程序的编程进行了优化,使用Go编译的程序可以媲美C或C++代码的速度,而且更加安全、支持并行进程。
1、内置runtime,支持自动垃圾回收,像java、c#、python等语言自带GC,不用为内存回收苦恼。
2、丰富的内置数据类型,像map、slice这些常用的数据类型。
3、函数返回多值,多值返回仅动态语言Python有此特征。
4、可直接编译成机器码,不依赖其他库,glibc的版本有一定要求,它可以在一台计算机上几秒内编译出一个大型的Go语言程序。
5、Go语言层面天生支持并发,这是Go语言最大的特色,可以充分的利用多核,很容易的实现并发操作。 从语言级别支持并发,通过轻量级协程 Goroutine 来实现程序并发运行。多核 CPU 可以让同一进程内的 “多个线程” 做到真正意义上的同时运行,这才是并行。
6、Go语言内嵌C语言支持(其作者就包括C语言的作者),所以Go语言里面也可以直接包含C语言代码,利用现有的丰富的C语言库。
7、Go是静态类型的语言,它的类型系统没有层级。因此用户不需要在定义类型之间的关系上花费时间,这样感觉起来比典型的面向对象语言更轻量级。
360
360对Golang的使用也不少,一个是开源的日志搜索系统Poseidon,托管在Github上,https://github.com/Qihoo360/pos
小米
小米对Golang的支持,莫过于运维监控系统的开源,也就是 http://open-falcon.com/
京东
京东云消息推送系统、云存储,以及京东商城等都有使用Go做开发。
百度
目前所知的百度的使用是在运维这边,是百度运维的一个BFE项目,负责前端流量的接入。他们的负责人在2016年有分享,大家可以看下这个http://www.infoq.com/cn/presentati
Facebook
Facebook也在用,为此他们还专门在Github上建立了一个开源组织facebookgo,大家可以通过 https://github.com/facebookgo 访问查看facebook开源的项目,比如著名的是平滑升级的grace。
腾讯
腾讯作为国内的大公司,还是敢于尝试的,尤其是Docker容器化这一块,他们在15年已经做了docker万台规模的实践,具体可以参考:http://www.infoq.com/cn/articles/t
1、nsq:bitly开源的消息队列系统,性能非常高,目前他们每天处理数十亿条的消息
2、docker:基于lxc的一个虚拟打包工具,能够实现PAAS平台的组建
3、kubernetes:Google出品,用于调度和管理Docker的开源容器管理系统,利用他,可以方便的管理你的docker实例,哪怕非常多,也是目前最流行的docker管理系统。
4、etcd:一款分布式的,可靠的K-V存储系统,使用简单,速度快,又安全。
5、packer:用来生成不同平台的镜像文件,例如VM、vbox、AWS等,作者是vagrant的作者
6、skynet:分布式调度框架
7、Doozer:分布式同步工具,类似ZooKeeper
8、Heka:mazila开源的日志处理系统
9、cbfs:couchbase开源的分布式文件系统
10、tsuru:开源的PAAS平台,和SAE实现的功能一模一样
11、groupcache:memcahe作者写的用于Google下载系统的缓存系统
12、god:类似redis的缓存系统,但是支持分布式和扩展性
13、gor:网络流量抓包和重放工具
14、hugo:一款极速的静态页面生成器,让你可以很快的搭建个人网站,提供了多套主题可供使用,并且可以自己定制,和NodeJS的Hexo是一样的。
15、grafana:一款开源监控度量的看板系统,可以接
16、Graphite,Elasticsearch,InfluxDB等数据源,定制化很高。
17、caddy:快速的,跨平台的HTTP/2 Web服务器。
18、beggo:国产开源的高性能Web框架,让你快速的开发Go Web应用服务,谢大主笔。
19、codis:Codis是一个分布式Redis解决方案,其实就是一个数据库代理,让你在使用Redis集群的时候,就像使用单机版的Redis是一样的,对开发者透明。
20、pholcus:Pholcus(幽灵蛛)是一款纯Go语言编写的支持分布式的高并发、重量级爬虫软件,定位于互联网数据采集,为具备一定Go或JS编程基础的人提供一个只需关注规则定制的功能强大的爬虫工具。
(本地环境的部署,以及新建一个demo项目)
go语言支持以下系统:
如果打不开可以使用这个地址:https://golang.google.cn/dl/。
windows安装方法:
https://www.runoob.com/go/go-concurrent.html
package main
import "fmt"
func main() {
/* 这是我的第一个简单的程序 */
fmt.Println("Hello, World!")
}
golang中分为值类型和引用类型
值类型分别有:int系列、float系列、bool、string、数组和结构体
引用类型有:指针、slice切片、管道channel、接口interface、map、函数等
值类型的特点是:变量直接存储值,内存通常在栈中分配
引用类型的特点是:变量存储的是一个地址,这个地址对应的空间里才是真正存储的值,内存通常在堆中分配
var s string = "apple"
var s = "apple"
s := "apple"
函数是基本的代码块,用于执行一个任务。
Go 语言最少有个 main() 函数。
你可以通过函数来划分不同功能,逻辑上每个函数执行的是指定的任务。
函数声明告诉了编译器函数的名称,返回类型,和参数。
Go 语言标准库提供了多种可动用的内置的函数。例如,len()
函数可以接受不同类型参数并返回该类型的长度。如果我们传入的是字符串则返回字符串的长度,如果传入的是数组,则返回数组中包含的元素个数。
/* 函数返回两个数的最大值 */
func max(num1, num2 int) int {
/* 声明局部变量 */
var result int
if (num1 > num2) {
result = num1
} else {
result = num2
}
return result
}
/*返回多个值*/
package main
import "fmt"
func swap(x, y string) (string, string) {
return y, x
}
func main() {
a, b := swap("Google", "Runoob")
fmt.Println(a, b)
}