1.简介:
Go(又称 Golang)是 Google 的 Robert Griesemer,Rob Pike 及 Ken Thompson 开发的一种计算机编程语言语言。
2.设计初衷:
Go语言是谷歌推出的一种的编程语言,可以在不损失应用程序性能的情况下降低代码的复杂性。谷歌首席软件工程师罗布派克(Rob Pike)说:我们之所以开发Go,是因为过去10多年间软件开发的难度令人沮丧。派克表示,和今天的C++或C一样,Go是一种系统语言。他解释道,"使用它可以进行快速开发,同时它还是一个真正的编译语言,我们之所以现在将其开源,原因是我们认为它已经非常有用和强大。"
- 计算机硬件技术更新频繁,性能提高很快。目前主流的编程语言发展明显落后于硬件,不能合理利用多核多CPU的优势提升软件系统性能。 2) 软件系统复杂度越来越高,维护成本越来越高,目前缺乏一个足够简洁高效的编程语言。 3) 企业运行维护很多c/c++的项目,c/c++程序运行速度虽然很快,但是编译速度确很慢,同时还存在内存泄漏的一系列的困扰需要解决。
解释性语言和编译性语言的区别主要在于代码的执行方式不同。Java是一种解释性语言,它需要Java虚拟机(JVM)来解释和执行程序。当你编写Java程序时,代码会被编译成字节码,这是一种中间代码。然后,当你运行Java程序时,JVM会读取字节码并将其转换为机器语言。这个过程是即时编译(Just-In-Time Compilation,JIT)的,意味着代码在运行时才会被编译。
相比之下,C++是一种编译性语言,它需要一个编译器将源代码编译成可执行文件。这个编译过程通常会将源代码翻译成汇编语言,然后再将汇编代码翻译成机器语言。由于编译器可以在编译期间对代码进行优化,因此C++程序的执行速度通常比Java程序快。
3.Go语言的 特点
高效性:Go语言是一种编译型语言,能够生成高效的机器码。同时,Go语言的垃圾回收机制和协程支持使其在处理大规模并发任务时非常高效。
并发性:Go语言内置支持协程和通道,能够方便地编写并发程序。协程可以轻松实现高并发,通道可以方便地进行通信和同步,这使得Go语言在网络编程、分布式系统和大数据处理等领域具有优势。
简单性:Go语言语法简洁,容易学习和理解。Go语言没有继承和多态等复杂的语言特性,使得程序设计更加直观和简单。
可读性:Go语言具有良好的代码风格和格式,使得代码易于阅读和维护。Go语言的代码组织方式和注释规范使得代码的可读性和可维护性得到保证。
安全性:Go语言具有内置的安全特性,如内存安全、类型安全和并发安全等。Go语言的垃圾回收机制可以避免内存泄露,类型安全可以防止代码中出现类型错误,而并发安全可以避免数据竞争问题。
跨平台性:Go语言的编译器可以将源代码编译为本地机器码,使得程序可以在各种操作系统上运行。同时,Go语言标准库中提供了许多与平台无关的包,如网络、文件操作等,可以方便地编写跨平台的程序。
总之、Go语言保证了既能到达静态编译语言的安全和性能,又达到了动态语言开发维护的高效率,具有高效性、并发性、简单性、可读性、安全性和跨平台性等优势,使得它在云计算、网络编程、分布式系统、大数据处理等领域得到了广泛应用。
4.应用领域:
区块链应用
区块链技术,简称BT(Blockchain technology),也被称之为分布式账本技术,是一种互联网数据库技术,其特点是去中心化、公开透明,让每个人均可以参与数据库记录
后端服务器应用
支撑主站后台流量(排序、推荐、搜索等),提供负载均衡,cache,容错,按条件分流,统计运行指标
云计算/云服务后台应用
盛大云CDN(内容分发网络)
应用范围:CDN的调度系统,分发系统、监控系统、短域名服务,CDN内部开放平台、运营报表系统以及其他一些小工具等
5.用go语言的公司:
1、Google 这个不用多做介绍,作为开发Go语言的公司,当仁不让。Google基于Go有很多优秀的项目,比如:GitHub - kubernetes/kubernetes: Production-Grade Container Scheduling and Management ,大家也可以在Github上 Google · GitHub 查看更多Google的Go开源项目。
2、Facebook Facebook也在用,为此他们还专门在Github上建立了一个开源组织facebookgo,大家可以通过Meta Go · GitHub访问查看facebook开源的项目,比如著名的是平滑升级的grace。 3、腾讯 腾讯作为国内的大公司,还是敢于尝试的,尤其是Docker容器化这一块,他们在15年已经做了docker万台规模的实践,具体可以参考腾讯万台规模的Docker应用实践_QCon_小盖_InfoQ精选文章 。 主要职责是: 负责腾讯游戏蓝鲸平台后台开发工作 负责容器相关的开发工作 和蓝鲸平台,容器开发有关。腾讯作为主要使用C/C++的公司,使用Go会方便很多,也有很多优势,不过日积月累的C/C++代码很难改造,也不敢动,所以新业务会在Go方面尝试。
4、百度 目前所知的百度的使用是在运维这边,是百度运维的一个BFE项目,负责前端流量的接入。他们的负责人在2016年有分享,大家可以看下这个 InfoQ - 促进软件开发及相关领域知识与创新的传播-极客邦 . 其次就是百度的消息系统,从其最近的Golang招聘介绍就可以看出来. 负责公司手百消息通讯系统服务器端开发及维护
5、京东 京东云消息推送系统、云存储,以及京东商城等都有使用Go做开发。
6、小米 小米对Golang的支持,莫过于运维监控系统的开源,也就是 http://open-falcon.com/ 。 此外,小米互娱、小米商城、小米视频、小米生态链等团队都在使用Golang。
7、360 360对Golang的使用也不少,一个是开源的日志搜索系统Poseidon,托管在Github上,GitHub - Qihoo360/poseidon: A search engine which can hold 100 trillion lines of log data.. 还有360的推送团队也在使用,他们还写了篇博文在Golang的官方博客上 https://blog.golang.org/qihoo。
360直播在招聘Golang开发工程师。
美团、滴滴、新浪、阿里、京东以及七牛等。一般的选择,都是选择用于自己公司合适的产品系统来做,比如消息推送的、监控的、容器的等,Golang特别适合做网络并发的服务,这是他的强项,所以也是被优先用于这些项目。
6. 开发工具介绍以及环境搭建
1.工具介绍:
- visual studio code, Microsoft产品(简称VSCode):一个运行于Mac Os、Windows和Linux 之上的,默认提供Go语言的语法高亮,安装Go语言插件,还可以支持智能提示,编译运行等功能。 2) Sublime Text,可以免费使用,默认也支持Go代码语法高亮,只是保存次数达到一定数量之后就会提示是否购买,点击取消继续用,和正式注册版本没有任何区别 3) Vim: Vim是从vi发展出来的一个文本编辑器,代码补全、编译及错误跳转等方便编程的功能特别丰富,在程序员中被广泛使用 4) Emacs : Emacs传说中的神器,她不仅仅是一个编辑器,因为功能强大,可称它为集成开发环境 5) Eclipse IDE工具,开源免费,并提供GoEclipse插件 6) LitelDE,LitelDE是一款专门为Go语言开发的跨平台轻量级集成开发环境(IDE),是中国人开发的。 7) JetBrains公司的产品:PhpStrom、WebStrom和PyCharm等IDE工具,都需要安装Go插件。
2.VSCode的安装:
下载vscode安装软件 Download Visual Studio Code - Mac, Linux, Windows
3.安装过程:
略(正常安装即可)
4.Windows下搭建Go开发环境--安装和配置SDK
1.搭建Go开发环境 - 安装和配置SDK
基本介绍: 1) SDK的全称(Software Development Kit 软件开发工具包) 2) SDK是提供给开发人员使用的,其中包含了对应开发语言的工具包。
2.SDK下载
- Go语言的官网为: golang.org ,无法访问,需要翻墙。 2) SDK下载地址 : Golang中文社区:Go下载 - Go语言中文网 - Golang中文社区 (1.15.6版本)
3.安装SDK
请注意:安装路径不要有中文或者特殊符号如空格等 SDK安装目录建议:一般我安装在d:/golang_sdk安装时 , 基本上是傻瓜式安装,解压就可以使用
4.配置环境变量
在命令提示符上输入go env查看环境变量 可以通过以下命令更改也可以通过环境变量直接更改
go env -w GO111MODULE=off(先设置on,当更新完gopls这个插件(可以智能提示)后,再重新设置为off(否则只在goroot 查找包路径))
go env -w GOPRIVATE=git.mycompany.com,github.com/my/private
go env -w GOPROXY = https://goproxy.io,direct
go env -w GOROOT=go SDK的安装目录
go env -w GOPATH=存放go代码的路径
注意:记得删除用户变量的gopath
GOPROXY这个环境变量主要是用于设置 Go 模块代理(Go module proxy),其作用是用于使 Go 在后续拉取模块版本时能够脱离传统的 VCS 方式,直接通过镜像站点来快速拉取。
GOPROXY 的默认值是: https://proxy.golang.org,direct,由于某些原因国内无法正常访问该地址,所以我们通常需要配置一个可访问的地址。目前社区使用比较多的有两个 Goproxy.cn和 GOPROXY.IO - A Global Proxy for Go Modules,当然如果你的公司有提供GOPROXY地址那么就直接使用
GOPROXY 允许设置多个代理地址,多个地址之间需使用英文逗号 “,” 分隔。最后的 “direct” 是一个特殊指示符,用于指示 Go 回源到源地址去抓取(比如 GitHub 等)。当配置有多个代理地址时,如果第一个代理地址返回 404 或 410 错误时,Go 会自动尝试下一个代理地址,当遇见 “direct” 时触发回源,也就是回到源地址去抓取。
GOPRIVATE
设置了GOPROXY 之后,go 命令就会从配置的代理地址拉取和校验依赖包。当我们在项目中引入了非公开的包(公司内部git仓库或 github 私有仓库等),此时便无法正常从代理拉取到这些非公开的依赖包,这个时候就需要配置 GOPRIVATE 环境变量。GOPRIVATE用来告诉 go 命令哪些仓库属于私有仓库,不必通过代理服务器拉取和校验。
GOPRIVATE 的值也可以设置多个,多个地址之间使用英文逗号 “,” 分隔。我们通常会把自己公司内部的代码仓库设置到 GOPRIVATE 中
使用go module引入包
接下来我们将通过一个示例来演示如何在开发项目时使用 go module 拉取和管理项目依赖。
5.再次验证path是否好用:(注意:控制命令台需要重启)
ok了,伙伴们,到现在为止,我们就可以愉快的开启GoLang之旅了。我们下篇再见。
版权归原作者 爱编程的小猴 所有, 如有侵权,请联系我们删除。