
golang_01-你的第一个golang程序
golang_01-你的第一个golang程序
为什么学习golang
-
Google开源
一提到Google,搞技术的想到的一般都是技术大厂,像很多现在业界主流的技术都是通过Google发表的论文来的,比如Grafana、prometheus等等都是来自Google的。
Go语言首先是萌芽于Google公司内部的语言,当时的Google中的大牛都是写C++的,大家都知道C++的特点,比较难、编译的时候时间比较久,然后这些写C++哥们儿写来写去发现太麻烦了,于是乎他们就造了一个自己的语言,这就是Go语言,下图是他们的主要作者。
-
编译型语言
什么是编译型语言什么是解释型语言可以看一下之前写初识python的时候已经写的很详细了,这里提一下编译型的优点型语言的优点它因为编译只做⼀次,运⾏时不需要编译,所以编译型语⾔的程序执⾏效率⾼。可以脱离语⾔环境独立运⾏。
-
21世纪的C语言
为啥说是21世纪的C语言呢,大家现在普遍接触到的,市面上主流的编程语言,包括C、C++、Python、Java、PHP等等,这些语言发布的年代基本都是上个世纪九十年代或以前,那当时的有什么特点呢,当时的处理器都是单核的,直到2005年AMD公司才发布了第一个商用的多核处理器,2007年的时候Go语言这个项目才在Google公司内部萌芽,这说明了什么呢,说明Go语言在发布的时候市面上就已经有成熟的多核处理器的技术存在了,所以在这个语言的诞生之初就已经考虑到了多核处理器的适配问题。
现在我们用Go语言写的程序,编译成二进制的执行文件,放到服务器上去运行的时候,在1.5版本之后默认是跑满整个CPU的,也就是你有8个核,我就跑慢8个核,区别于像Redis这种,只占单核心。这也是Go语言为什么天生支持并发,那么之前的那些语言该怎么办呢,就通过不断的加一些框架,加一些语法糖。像Java有很多高并发的异步框架、Python加了很多像Async IO 这种拗口的语法,加了很多的语法来不断的提高语言的支持性
安装Go语言
Go官网下载地址:https://golang.org/dl/
Go官方镜像站(推荐):https://golang.google.cn/dl/
上面是Go语言的官方下载链接,因为Go语言是Google的,所以在中国可能会被墙,这里我们推荐用下面的官方镜像站
在我写这篇文章的时候目前的golang的版本是1.14.1,点击下载与系统相应的版本就可以了,windows和macOS下载的都是图形化界面的安装包,修改一下相应的安装路径,一路next就可以啦。
安装完Go语言之后在cmd下输入go env,这里面有一个GOPATH,这个GOPATH是一个历史的产物,在go1.11之前他规定我们写代码必须在GOPATH下写代码,不能在别的地方写,这个GOPATH我们只用在安装完GO语言之后,配一下环境变量即可。在Go语言1.11之后你就可以不在GOPATH下写代码了,只要你开启了GO111MODULE这个模式。 在1.14的版本是默认开启这个模式的。
值得注意的是,安装完Go语言,记得配一下环境变量GOPROXY,GOPROXY的默认的网址是Google的网址,在国内可能会被墙,所以我们把GOPROXY配成https://goproxy.cn,direct 具体环境变量怎么配看下图
此电脑(右键)->属性->高级系统设置->环境变量
配完GOPROXY,我们基本上就搞定了,这里我们可以重新打开一个cmd(一定要打开一个新的cmd啊!!!)再次输入go env 查看GOPROXY的值。
开发环境
Go采用的是UTF-8编码的文本文件存放源代码,理论上使用任何一款文本编辑器都可以做Go语言开发,这里推荐使用VS Code
和Goland
。 VS Code
是微软开源的编辑器,而Goland
是jetbrains出品的付费IDE。
我们这里使用Goland
做为go语言的开发工具。我们从jetbrains的官网上下载Goland
安装和之前安装Go语言一样,修改一下相应的安装路径,一路next就可以啦。
安装完后运行Goland
选择你喜欢的主题,start using 就可以啦
由于这是个付费的IDE所以你可能需要购买他的使用权进行激活。下图是安装好后Goland
的初始界面
我们在平时写代码的目录下新建一个文件夹,我这里以D:\mycode\learn_go
为例
选择open Project 选择D:\mycode\learn_go
目录进入即可,如图我们创建一个文件夹来存放我们最近写的基础语法的Demo。
你的第一个golang程序
那么我们先写一个所有变成语言的入门程序HelloWorld。
首先在basis
目录下new一个directory
叫HelloWorld
,然后我们在HelloWorld
下new一个Go File
叫main.go
,New Go File
的时候要选下面那个Simple Application
.
如果出现以下问题,我们只需告诉IDE我们的SDK在哪就可以了
然后我们开始写代码,你会发现你刚创建好的go文件的第一行自己就出现了一个package XXXX
,如果你刚刚不小心创建文件的时候选了第一个Empty File
,那么这里我们将其改为package main
,然后写下如下代码
package main
func main() {
fmt.Println("Hello World!")
}
你会发现他自动多了一行import "fmt"
,这是Goland的自动导包的功能。右键代码边上空白处单击Run go build main.go
即可编译执行,如下图。
上面已经完成了你的第一个golang程序,那么你心里一定有很多的问号,这些都是些什么意思呢,我们接着往下讲,先解释一下我们最后一步Run go build main.go
是干什么的?这里的Run go build main.go
就是编译程序并执行的意思。
go build
go build
表示将源代码编译成可执行文件。我们下面演示一下在cmd中编译程序并执行。首先打开main.go的所在目录,并在地址栏敲下cmd
输入go build main.go
并回车
如上图,发现执行完go build main.go
之后,文件夹中多出来了一个名为main.exe
的文件,这就是我们将main.go
编译后生成的可执行文件(ps : macOS或者Linux中生成的执行文件是没有后缀的,即main)。我们来执行这个文件,得到的结果就是输出一个HelloWorld!
,如下图。
go build
除了这么用 他还可以带参数,也可以啥都不带直接执行
如上图所示,当go build
后面什么都不带的时候,会发现go build
将源代码编译成了与项目名(main.go所在的文件夹)同名的.exe
文件,当go build
后面带上参数-o
加文件名的时候,会编译成你想要的文件名
go build
//编译成与项目名同名的.exe文件
go build -o 你想要的文件名 源文件名
//编译成你想要的文件名
那么我们回过头来看Goland的控制台,点击4 go setup calls
我们会发现其实Goland就是用的go build
的方法来编译生成了一个临时的.exe
文件,并执行了该程序。
GOROOT=D:\Program Files\Go #gosetup
GOPATH=C:\Users\sanmu\go #gosetup
"D:\Program Files\Go\bin\go.exe" build -o C:\Users\sanmu\AppData\Local\Temp\___go_build_main_go.exe D:/mycode/learn_go/basis/HelloWorld/main.go #gosetup
C:\Users\sanmu\AppData\Local\Temp\___go_build_main_go.exe #gosetup
跨平台编译
默认我们go build
的可执行文件都是当前操作系统可执行的文件,如果我想在windows下编译一个linux下可执行文件,那需要怎么做呢?
只需要指定目标操作系统的平台和处理器架构即可:
SET CGO_ENABLED=0 // 禁用CGO
SET GOOS=linux // 目标平台是linux
SET GOARCH=amd64 // 目标处理器架构是amd64
使用了cgo的代码是不支持跨平台编译的
然后再执行go build
命令,得到的就是能够在Linux平台运行的可执行文件了。
Mac 下编译 Linux 和 Windows平台 64位 可执行程序:
CGO_ENABLED=0 GOOS=linux GOARCH=amd64 go build
CGO_ENABLED=0 GOOS=windows GOARCH=amd64 go build
Linux 下编译 Mac 和 Windows 平台64位可执行程序:
CGO_ENABLED=0 GOOS=darwin GOARCH=amd64 go build
CGO_ENABLED=0 GOOS=windows GOARCH=amd64 go build
Windows下编译Mac平台64位可执行程序:
SET CGO_ENABLED=0
SET GOOS=darwin
SET GOARCH=amd64
go build
golang文件的基本结构
讲完了编译,我们回过头来看代码,首先所有Go语言的代码都放到.go
文件里面去
package main
import "fmt"
func main() {
fmt.Println("HelloWorld!")
}
一共5行代码,分别都是些什么意思呢,我们接下来一行一行的讲。
package main
所有的.go
文件都需要有一个package
的声明,package
是一个关键字,用来声明这个文件属于哪个包,后面跟的是包的名字。这里特别注意的是如果你的package
后面跟的是一个main
包,那么说明你的代码最终会编译成一个可执行的二进制文件。如果你想要你的main包能够编译的话,那么你就需要下面的main函数。
func main() {
}
这里的main函数是整个程序的入口,也就是说你的整个程序是从main函数开始执行,main函数是没有参数也没有返回值的。
import "fmt"
这是一个导入语句,比如说我们导入内置的包,第三方的包,都是通过import
来导入的,后面跟的包名需要用""
来包裹。
值得注意的是,在Go语言里,你在函数的外面只能放一些标识符(变量、常量、函数、类型等)的声明,不能放逻辑语句,他和python不一样,你是不能在函数外写语句,你像在func main(){}
外面写一句打印语句fmt.Println("XXXXX")
是不行的。
那么至此为止,你的第一个golang程序就到这里啦,bye~