Go语言入门——环境准备篇(一)

环境准备篇

背景

Go(又称Golang)是Google开发的一种静态强类型、编译型、并发型,并具有垃圾回收功能的编程语言。
由罗伯特·格瑞史莫(Robert Griesemer),罗勃·派克(Rob Pike)及肯·汤普逊(Ken Thompson)于2007年9月开始设计,稍后Ian Lance Taylor、Russ Cox加入项目。Go是基于Inferno操作系统所开发的。Go于2009年11月正式宣布推出,成为开放源代码项目

Go语言的三位作者,都是业界大神

Robert Griesemer:曾协助制作Java的HotSpot编译器和Chrome浏览器的JavaScript引擎V8

Rob Pike:曾是贝尔实验室的Unix团队和Plan9操作系统计划成员,与Thompson共同创造了UTF-8字符编码

Ken Thompson:是C语言和Unix的创造者。(1983年图灵奖和1988国家技术奖)

近十年来,C++在计算领域没有得到良好发展,其语法复杂,开发效率较低,在多个编程语言的排行中反而低于C语言。C++作为替代C语言的新秀而出现,却没能真正实现这个目标,在市场中越来越低于预期,除了在游戏引擎领域占据主导地位,其他领域很难有存在感。而之所以在游戏引擎领域能占据主导地位,是因为游戏引擎的特殊性,需要一门高性能的面向对象编程语言,唯一的选择只能是C++。C语言开发游戏引擎会非常艰难,代码不易维护,不适用于游戏引擎的业务逻辑,而早期的Java,性能还远远达不到要求,随着Go语言的出现,这一现状正在被改变,用Go语言开发的可适用于生产的游戏引擎已经出现,相信随着Go语言的发展,会有更多的Go语言游戏引擎出现。在Web领域,C++与Go相比更不具备可比性,Go语言在Web领域已开始逐渐抢夺Java的市场。

Go与Java很难分辨优劣,只能说仁者见仁智者见智,短期内也不存在谁替代谁的可能,但给C语言学习者的启发是,C++已经不再是C语言学习者后续晋级学习的最好选择,C语言学习者学习Go语言,反而事半功倍,水到渠成。

具有戏剧性的是,Go语言的诞生,是以上大神一起闲聊吐槽C++多么坑爹时,突然想到不如干脆开发个新的C语言代替C++,于是说干就干,开发了早期的Go语言。可以想见,我们普通人吹了牛逼后也就算了,大神牛逼的地方是把自己吹的牛逼实现了。

Go开发环境搭建

建议在有其他编程语言的基础下学习Go,最好是有C语言基础,Go中虽然弱化了指针,但是仍然提供了指针,即使是Java开发者,也不一定能很好理解指针。相关的知识,可以看看我的 C语言专栏

下载

Go语言官网
可能需要科学上网才能访问,以下给出Go语言中文网的下载地址
安装包下载

根据自己的操作系统,选择对应平台版本下载,本文以Windows为例,因为Linux、MacOS环境搭建都比Windows更简单

环境配置

Windows安装包下载后,选择下一步安装即可。接下来需要配置环境变量。Windows的环境变量设置方式,请自行谷歌,相信有编程基础的朋友都应该设置过环境变量了。

  1. 创建变量名GOROOT,变量值指向刚刚安装完成后的安装目录(根目录)
  2. 创建变量GOPATH,指向我们存放项目代码的工作空间
  3. 创建变量GOBIN,路径写为%GOROOT%\bin;
  4. 最后,将%GOBIN%加入到系统PATH变量中

完成环境配置后,在命令行输入以下命令,检查环境配置是否成功

go env

关于Go语言环境变量的简单说明
GOROOT:Go的安装目录
GOPATH:用于Go的第三方Package目录存放,也包括我们的工程源码,这个目录不能指定到Go的安装目录中
GOBIN:Go二进制文件存放目录,建议写成%GOROOT%\bin;
GOOS:指定操作系统平台
GOARCH:指定CPU架构,如:i386表示x86,amd64表示x64

注意:
go1.8版本以后,GOPATH在未设置情况下,会有一个默认值。Unix/Linux/macOS下指向HOME/go这个目录,在Windows下指向%USERPROFILE%/go这个目录

通常的,GOPATH所指定的文件夹下,需要再新建三个子文件夹
src:存放源代码
pkg:编译后产生的文件
bin:编译后生成的可执行文件

说实话,在Go1.11版本之前,它的源码管理是非常混乱的,特别是第三方包依赖。简单说,我们设置好GOPATH路径后,那么编写的源码就必须放在GOPATH下的src目录中,这样非常不灵活,我们不能在任意目录创建工程,否则无法编译。而且我们安装的第三方库也会自动安装到这个src目录中,这样我们自己的工程和第三方库都混杂在src目录下,更为要命的是,Go的第三方包没用版本管理,相信有过Java或Python开发经验的人都知道第三方库版本管理是多么重要的事情,但是这些缺陷都在Go1.11版本得到了改变,目前Go的最新版本是1.12,因此建议大家要安装1.12版本的Go。

IDE的选择

  • LiteIDE
    目前Go有一个专用IDE是LiteIDE,它是用Qt开发的,与成熟的IDE相比仍有一些差距,但用于学习是足够了。这个IDE我本人使用过一段时间,其存在偶发的界面卡死情况,实战开发项目时会非常蛋疼,不推荐工程实践。

  • GoLand
    这是JetBrains公司出品的IDE,相信该公司出品的IDE大家都耳熟能详了,例如大名顶顶的Android Studio,Java后端的IntelliJ IDEA,还有我最喜欢的最好的Python IDE PyCharm。而GoLand唯一的缺点是需要购买,小伙伴们只能绞尽脑汁的找破解了。

  • VSCode
    VSCode严格说只能算是编辑器,不过它确实是目前最流行的编辑器之一,轻松胜任各种开发环境,如前端、Flutter开发等,这也是我目前最喜欢的编辑器。其插件庞大,只需装一款Go语言插件就能拥有轻量级IDE的能力。

Go语言第一行代码

我们打开任意一款心爱的编辑器(记事本除外),写下第一行Go代码,向世界打个招呼

GOPATH指定的路径下的src目录下创建go源码文件hello.go

package main

import "fmt"

func main() {
	fmt.Printf("hello,world!\n")
}

在当前目录下打开cmd命令行,输入如下命令编译并执行Go程序

go run hello.go

怎样,以上代码是否看起来和C语言超像,连Printf函数的用法都和C语言如出一辙,区别只是Go语言中的函数,基本上都是首字母大写。

将Go源代码编译成exe可执行程序

go build hello.go

可以看到,当前目录下即生成了一个hello.exe文件

Go语言交叉编译

假如你的朋友使用的是Mac电脑,而你使用的是Windows电脑,那么你编译的exe可执行程序发给你的朋友是没有任何用处的,因为Windows上的程序是不能在其他系统上运行的。简单的做法是直接将你写好的源代码发给朋友,让他自己去编译Mac上的可执行程序。如果你的朋友不会编译,那么就需要你为他编译一个Mac版的程序。
通常来说,本地只能编译自己平台的程序,如果你要在Windows上编译一个Mac版或者Linux版的程序,这就叫交叉编译,需要使用到交叉编译器。如果是C语言就得你自己去寻找一个可用的交叉编译器,而Go语言则已经自带了交叉编译器,非常方便。这一点意义非常大,使得我们的开发环境可以和生产环境不一样。

现在就编译一个Linux版本的hello world

在cmd命令行中设置临时环境变量,表示目标平台为64位的Linux操作系统

SET GOOS=linux
SET GOARCH=amd64

再次编译

go build hello.go

此时生成了一个不带后缀名的hello文件,这就是Linux系统的可执行文件,拷贝到Linux服务器上,也可以虚拟机创建一个ubuntu系统,然后在shell中执行./hello即可运行。

Go工程管理

在本篇的最后,我们来说一下关于1.11版本的新特性,第三方库的版本管理功能。

1.11版本新增了一个环境变量 GO111MODULE,它有两个值可以设置,on或者auto,建议设置为auto,让其自动判断。

将以上环境变量设置好之后,我们就可以在任意目录下创建源码工程了,例如

  • GOPATH以外的任意一个目录创建hello文件夹

  • hello文件夹下创建一个源码,或者将之前的hello.go拷贝过来

  • 在该目录下打开cmd命令行,并执行命令go mod init hello初始化

  • 接下来就可以执行go run hello.go命令运行了。

除了可以在任意目录创建源码工程,还多出了一个第三方库的版本管理功能。执行初始化命令之后,会在项目中生成一个版本管理的文件go.mod,打开该文件即可查看或设置库的版本,目前我们没有引用一个第三方库,因此只有go 1.12这一行版本信息。

关于初始化命令的格式

go mod init + 模块名称

要注意,该特性只在1.11及其之后的版本中可用。

欢迎关注我的公众号:编程之路从0到1

编程之路从0到1

展开阅读全文

没有更多推荐了,返回首页

©️2019 CSDN 皮肤主题: 技术黑板 设计师: CSDN官方博客
应支付0元
点击重新获取
扫码支付

支付成功即可阅读