文章转载自公众号:SRE废柴实验室
喜欢的话可以关注一下哦~专注SRE 希望早日实现国内的SRE精英联盟
持续更新SRE相关内容:k8s、golang、云原生、架构等
文章链接:你真的了解Golang吗?
Go历史
Go的诞生
Go 语言起源 2007 年,并于 2009 年正式对外发布。它从 2009 年 9 月 21 日开始作为谷歌公司 20% 兼职项目,即相关员工利用 20% 的空余时间来参与 Go 语言的研发工作。
- 2007 年 9 月 20 日的下午,在谷歌山景城总部的一间办公室里,谷歌的大佬级程序员 Rob Pike在等待一个 C++ 项目构建的过程中和谷歌的另外两个大佬级程序员 Robert Griesemer和 Ken Thompson进行了一次有关设计一门新编程语言的讨论。
- 计算机硬件技术更新频繁,性能提高很快。目前主流的编程语言发展明显落后于硬件,不能合理利用多核多CPU的优势提升软件系统性能。
- 软件系统复杂度越来越高,维护成本越来越高,目前缺乏一个足够简洁高效的编程语言。
- 企业运行维护很多C/C++的项目,C/C++程序运行速度虽然很快(因为采用静态编译),但是编译速度却很慢,同时还存在内存泄露的一系列困扰需要解决。
为什么使用Go
- 简单好记的关键词和语法。轻松上手,简单易学。
- 更高的效率。比Java,C++等拥有更高的编译速度,同时运行效率媲美C,同时开发效率非常高。
- 生态强大,网络上库很丰富,很多功能使用Go开发非常简单。
- 语法检查严格,高安全性。
- 严格的依赖管理,go mod命令。
- Go拥有强大的编译检查、严格的编码规范和完整的软件生命周期工具,具有很强的稳定性,稳定压倒一切。
- 跨平台交叉编译,windows就可以编译出mac,linux上可执行的程序。
- 异步编程复杂度低,易维护,GO 语言中 Channel 设计,异步程序写起来非常自然。
- 语言层面支持并发,
go关键字(协程)
使得go的并发效率极高。 - 严格的语法规范,所有程序员写出来的代码都是一样的,对大团队来说,非常友好。
- Go 的并发、性能、安全性、易于部署等特性,使它很容易成为“云原生语言”。容器和云的使用上非常广
如何下载Go
Golang官网:https://golang.google.cn/dl/
Windows:选择对应的操作系统,可以下.msi直接安装,也可以下zip包自己放到指定位置,然后添加PATH路径,设置GOPATH等环境变量即可
Linux:选择对应的tar包,然后解压放到对应的目录下,并添加PATH路径和设置GOPATH等环境变量即可
需要配置的环境变量有:
GOROOT
:go语言所在的目录,用于全局执行go相关的命令
在path路径里要添加ROOT目录下的bin目录
go env 能够输出各项环境变量就是配置好了,然后能看到对应的GOROOT
GOPATH
:工作目录,工程代码存放的位置,引入go mod 包管理之后,所有的第三方包都会在 GOPATH/pkg/mod/ 目录下,并分为不同来源的包放在不同的文件夹下,方便统一进行管理,这里GOPATH不管是Windows还是Linux 都推荐设置在用户的家目录的go文件夹下,这是作者比较喜欢的一个方式
在Linux中,可以在 .bashrc 中用 export 命令设置好各项go的环境配置变量,source .bashrc 即可
GOPROXY
:代理,由于go在下载第三方包的时候,可能需要翻墙用到外面的资源,就类似于python pip install 需要设置一个源一样,Go 安装第三方包也需要配置代理,方便我们进行第三方库的下载和使用
- 全都设置完成后 go env 命令查看是否都配置成功
开始用一个小demo入门Go吧~
我们先在测试目录下新建一个hello文件夹,并进入,输入命令go mod init hello
会生成一个go.mod 文件,这个go.mod文件实际上就是一个go的包管理文件,用来管理项目所需要使用的依赖库的版本的。
接下来实现要给最简单的程序吧
vim main.go
// package 定义包名 main 包名
package main
// import 引用库 fmt 库名
import "fmt"
// func 定义函数 main 函数名
func main() {
// fmt 包名 . 调用 Print 函数,并且输出定义的字符串
fmt.Print("Hello Golang")
}
运行以下命令: go run main.go
相应的开发工具
Goland、vscode 都是非常好用的开发工具
其实以作者的使用习惯来说更偏向于使用Goland,但是vscode对多种语言都很友好,并且免费,各有各的好处,可以根据自己不同的情况去做不同的选择
Go语言的适用场景:
Go因为其优秀的并发模型和轻量级线程(协程 goroutine)的支持,所以Go特别擅长处理高并发的网络服务和分布式系统,在构建Web服务、微服务架构、云计算服务等方面表现突出
- Web服务框架有诸如 gin的轻量级框架和beego 这种大型框架,并且像知乎等大型服务的后端架构是用Go实现的;
- 在微服务架构方面有 go-zero、kratos 等优秀的微服务架构,go-zero广泛应用于各个大公司的微服务架构,kratos也是 bilibili 开源的微服务架构,功能强大,并且应对大量用户的表现十分优良;
- 容器化和微服务是云计算领域应用最广泛的一种技术架构。它可以将应用程序打包成一个个独立的容器,实现快速部署和扩展。Go的协程机制和高并发性使得它成为构建高性能微服务的理想语言;在云计算环境中,分布式计算是常见的需求。Golang提供了许多库和工具来简化分布式计算的开发。
此外,Golang还适用于开发高性能的系统工具、网络编程、大数据处理等领域。总的来说,Golang适合需要高性能、高并发和简洁代码的场景。