一、Go的介绍
1.1、Go的来历:
很久以前,有一个IT公司(好吧,其实就是 谷歌(Google)公司),这公司有个传统,允许员工拥有20%自由时间来开发实验性项目。在2007的某一天,公司的几个大牛,正在用c++开发一些比较繁琐但是核心的工作,主要包括庞大的分布式集群,大牛觉得很闹心,后来c++委员会来他们公司演讲,说c++将要添加大概35种新特性。这几个大牛的其中一个人,名为:Rob Pike,听后心中一万个xxx飘过,“c++特性还不够多吗?简化c++应该更有成就感吧”。于是乎,Rob Pike和其他几个大牛讨论了一下,怎么解决这个问题,过了一会,Rob Pike说要不我们自己搞个语言吧,名字叫“go”,非常简短,容易拼写。其他几位大牛就说好啊,然后他们找了块白板,在上面写下希望能有哪些功能。接下来的时间里,大牛们开心的讨论设计这门语言的特性,经过漫长的岁月,他们决定,以c语言为原型,以及借鉴其他语言的一些特性,来解放程序员,解放自己,然后在2009年,go语言诞生。
1.2、Go的简介:
Go语言(或称 Golang)起源于 2007 年,是由 Goole公司(谷歌)创造出来的, 并在 2009 年正式对外发布。
Go 是非常年轻的一门语言,它的主要目标是“兼具 Python 等动态语言的开发速度和 C/C++ 等编译型语言的性能与安全性”。Go语言不但能让你访问底层操作系统,还提供了强大的网络编程和并发编程支持。Go语言的用途众多,可以进行网络编程、系统编程、并发编程、分布式编程。
Go语言的推出,旨在不损失应用程序性能的情况下降低代码的复杂性,具有“部署简单、并发性好、语言设计良好、执行性能好”等优势,目前国内诸多 IT 公司均已采用Go语言开发项目。
最新版本的Go语言(目前1.15)不在依赖别人(不再依赖C语言,Go的一些相关源码已经很少看到C语言了),彻底实现了自己实现自己。所以Go语言被称为是“21 世纪的C语言”。说不定以后会基于Go开发出N中新的编程语言。。。Go从C语言借鉴了相似的表达式语法、控制流结构、基础数据类型、调用参数传值、指针等很多思想,还有C语言一直所看中的编译后机器码的运行效率以及和现有操作系统的无缝适配。
Go语言没有类和继承的概念,所以它和 Java 或 C++ 看起来并不相同。但是它通过接口(interface)的概念来实现多态性。Go语言有一个清晰易懂的轻量级类型系统,在类型之间也没有层级之说。因此可以说Go语言是一门混合型的语言。
很多重要的开源项目都是使用Go语言开发的,其中包括 Docker、Go-Ethereum、Thrraform 和 Kubernetes。
Go语言的所有设计者都说,设计Go语言是因为 C++ 给他们带来了挫败感。在 Google I/O 2012 的 Go 设计小组见面会上,Rob Pike 是这样说的:
我们做了大量的 C++ 开发,厌烦了等待编译完成,尽管这是玩笑,但在很大程度上来说也是事实。
1.3、Go的优点:
学习容易:go语言语法简单简洁、有点类似C与C++的写法;只需要短短的时间即可上手并写出一个小项目
效率:具有快速的编译时间、开发效率和运行效率高(静态编译,编译好后,扔服务器直接运行)
齐全的标准库:go的标准库基本都很稳定,并且包含互联网应用、系统编程和网络编程这些库
部署方便:二进制文件,ctrl c + v部署
简单的并发:简简单单的即可实现并发和异步编程(语法层支持并发,和拥有同步并发的channel类型,使并发开发变得非常方便。)
稳定性:go具有强大的编译检查、严格的编码规范和完整的软件生命周期工具,具有很强的稳定性
其它优点:自带gc、简单的思想,没有继承,多态,类等
Go 语言可以在不损失应用程序性能的情况下降低代码的复杂性。谷歌首席软件工程师罗布派克(Rob Pike)说:我们之所以开发 Go,是因为过去10多年间软件开发的难度令人沮丧。Google 对 Go 寄予厚望,其设计是让软件充分发挥多核心处理器同步多工的优点,并可解决面向对象程序设计的麻烦。它具有现代的程序语言特色,如垃圾回收,帮助开发者处理琐碎但重要的内存管理问题。Go 的速度也非常快,几乎和 C 或 C++ 程序一样快,且能够快速开发应用程序。
关于动态语言和静态语言的一些区别:
动态语言:不需要直接指定变量类型,在解释的时候,转换为目标代码和运行程序一步到位,比如PHP、Python、Ruby、Perl等
静态语言:变量的类型在编译之前就需要确定,在编译的时候需要先编译,将源码转换成目标代码,然后需要运行目标代码程序才能运行,比如Go、C++、Java、Delphi、C#等
1.4、Go的缺点:
缺少明确主要框架:虽然有beego、echo、gin、lris等很多框架 但是目前并没有一个特别主流 使用的人非常多的一个框架 Go这种编译型语言 可以不用框架即可开始进行开发,PHP有Laravel,Java Spring系列,Python的Django等
错误处理:Go语言通过函数和预期的调用代码简单的返回错误而帮助开发者处理编译错误,但是容易丢失错误发生的范围,一些错误信息可能也需要自己定义
软件包管理:Go语言虽然优秀 but尴尬的是,它没有办法制定特定版本的依赖库,而PHP、Java、Python等都有很好的软件包管理系统
1.5、Go的主要特征:
1、自动立即回收 2、更丰富的内置类型 3、函数多返回值 4、错误处理 5、匿名函数和闭包 6、类型和接口 7、并发编程 8、反射 9、语言交互性
1.6、Go的文件命名
所有的go源码都是以 ".go" 结尾
二、windows上安装搭建Go环境
go的官方网站地址是:golang.org 由于众所周知的原因,需要一些特殊手段才能打开官网,所以请移步到这里:https://golang.google.cn/dl/ 进行下载go的安装包,打开页面可以看到windows上提供了.msi和.zip两种安装包
.msi:一键安装包,直接下一步下一步,安装完毕后 一些相关的环境变量也给你直接设置好了
.zip:需要自己解压缩并安装,且需要自己设置相关环境变量,新手推荐用这种方式安装go
我这里下载的是:go1.15.6.windows-amd64.zip 版本
解压,并把解压出来的所有文件以及文件夹移动到自己指定的一个目录中,我这里是:D:\software\go目录,如下图所示:
接下来就很easy了,设置几个环境变量,windows上go的环境就已经搭建完成了。。
把go安装目录中的bin目录添加到环境变量中(win7和win10找到环境变量的步骤基本是一样的),截图如下:
打开cmd命令行 输入 go version即可看到go的版本信息:
到这一步,go的环境安装就算是搭建完成了,是不是很easy、、
2.2、再次设置一些其它相关环境变量(用于后面的开发以及运行可执行程序)
GOROOT :就是你的go安装文件的路径,也就是本文中的 D:\software\go 目录,把 D:\software\go 路径设置为一个环境变量,环境变量名称叫 GOROOT
GOPATH(重要):后面使用go开发的项目也是写在GOPATH指定的路径中,go的一些工具或下载import包都会用到这个目录 。比如说import "某包",在GOROOT里木有,就会去GOPATH去寻找。需要特别说明的是,GOPATH指定的路径由自己说了算,本文中 GOPATH 指定的路径是 D:\software\gopath 把 D:\software\gopath 路径设置为一个环境变量,环境变量名称叫 GOPATH
补充说明下:GOPATH其实可以指定多个路径,初学的时候就指定一个即可
GOPATH的三个约定目录:
$GOPATH 目录约定有三个子目录(需要自己手动创建出来),分别是:
①、src 存放源代码(各种文件夹、 .go文件等,说白了就是写go代码的目录)
②、pkg 编译时生成的中间文件(比如:.a)
③、bin 编译后生成的可执行文件(再次强调,go是需要编译的,不像php 写完代码可以直接运行、直接解析看效果。当然了 为了方便,也可以把此目录加入到 $PATH 环境变量中)
本文中,也就是在 D:\software\gopath 目录中创建三个文件夹,分别是 src、pkg、bin 如下图所示:
三、初次使用go语言开发,了解go run、go build、go install命令
在 D:\software\gopath\src 目录中创建一个go project,假设就叫mygo,完整路径为:D:\software\gopath\src\mygo 如下图所示:
在mygo目录中创建一个go文件,假设就叫 index.go(PS:老习惯了 都喜欢首页叫 index),如下图所示:
index.go文件里面的代码为:
package main import "fmt" func main() { fmt.Print("hello world") }
3.1、使用go run 命令来运行index.go文件
cmd命令行模式下,进入D:\software\gopath\src\mygo目录 执行 go run index.go
C:\Users\Administrator>cd D:\software\gopath\src\mygo C:\Users\Administrator>d: D:\software\gopath\src\mygo>go run index.go hello world D:\software\gopath\src\mygo>
经过短暂的几秒钟之后,cmd命令行输出了index.go文件里面的定义好的要输出的 hello world
but 重要的一点出现了,运行完go run index.go命令后,虽然 D:\software\gopath\src\mygo 目录下没发生什么变化,但是在 D:\software\gopath\bin 目中,已经生成了一个mygo.exe的可执行程序,注意 是mygo.exe 不是index.exe,说明go在编译生成的可执行文件程序是以项目文件夹命名(D:\software\gopath\src\mygo),不是以go文件名命名的,如下图所示:
3.2、使用go build命令
D:\software\gopath\src\mygo>go build D:\software\gopath\src\mygo>
go build命令会在 D:\software\gopath\src\mygo 目录中编译生成一个mygo.exe可执行文件,即 在写代码的目录中生成(也就是本文中的mygo文件夹中)
3.3、使用go install命令
D:\software\gopath\src\mygo>go install D:\software\gopath\src\mygo>
go install命令会在 D:\software\gopath\bin 目录中编译生成一个mygo.exe可执行文件。然后 可以使用cmd命令行进入gopath中的bin目录(即 D:\software\gopath\bin)输入mygo 按回车运行 就可以输出 hello world
3.4、使用go run、go build、go install命令总结及区别
go run命令(编译并运行):Python 或者 Lua 语言可以在不输出二进制的情况下,将代码使用虚拟机直接执行。Go语言虽然不使用虚拟机,但可使用 go run 指令达到同样的效果。即:go run 命令会编译源码,并且直接执行源码的 main() 函数,不会在当前目录留下可执行文件。
go build命令(go语言编译命令):Go语言中使用 go build 命令主要用于编译代码。在包的编译过程中,若有必要,会同时编译与之相关联的包。
go build命令补充部分说明如下:
①、Go语言的编译速度非常快。Go 1.9 版本后默认利用Go语言的并发特性进行函数粒度的并发编译。
②、Go语言的程序编写基本以源码方式,无论是自己的代码还是第三方代码,并且以 GOPATH 作为工作目录和一套完整的工程目录规则。因此Go语言中日常编译时无须像 C++ 一样配置各种包含路径、链接库地址等。
③、go build 有很多种编译方法,如无参数编译、文件列表编译、指定包编译等,使用这些方法都可以输出可执行文件。
go install命令(编译并安装):go install 命令的功能和上面《go build命令》中介绍的 go build 命令类似,附加参数绝大多数都可以与 go build 通用。go install 只是将编译的中间文件放在 GOPATH 的 pkg 目录下,以及固定地将编译结果放在 GOPATH 的 bin 目录下。
这个命令在内部实际上分成了两步操作:第一步是生成结果文件(可执行文件或者 .a 包),第二步会把编译好的结果移到 $GOPATH/pkg 或者 $GOPATH/bin中。
四、Linux上安装搭建Go环境
linux版本:CentOS Linux release 7.7.1908 (Core)
go版本:go1.15.6
# 下载并开始安装go wget wget https://dl.google.com/go/go1.15.6.linux-amd64.tar.gz tar -zxvf go1.15.6.linux-amd64.tar.gz # 解压完之后 会解压出来一个go目录 # 把解压后的go目录移动到/usr/local目录下 mv ./go /usr/local/go # 设置go的相关环境变量(在全局环境下设置 也可以只给当前登录进linux用户设置,这里是在全局环境下设置的) vim /etc/profile export PATH=$PATH:/usr/local/go/bin # 把go的bin目录加入到环境变量中 export GOPATH=/go # 设置一个GOPATH路径 /go可以自己任意更改 保存后 执行下面的命令,刷新环境变量配置 source /etc/profile # 查看go版本 go version
搞定
人生的旅程就是这样,用大把时间迷茫,在几个瞬间成长
声明:禁止任何非法用途使用,凡因违规使用而引起的任何法律纠纷,本站概不负责。
精彩评论