前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >Go语言入门——环境准备篇(一)

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

作者头像
arcticfox
发布2019-07-31 16:15:29
5290
发布2019-07-31 16:15:29
举报
  • 环境准备篇
    • 背景
    • Go开发环境搭建
      • 下载
      • 环境配置

    • IDE的选择
    • Go语言第一行代码
    • Go语言交叉编译
    • 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变量中

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

代码语言:javascript
复制
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唯一的缺点是需要购买,小伙伴们只能绞尽脑汁的找破解了。
  • VSCodeVSCode严格说只能算是编辑器,不过它确实是目前最流行的编辑器之一,轻松胜任各种开发环境,如前端、Flutter开发等,这也是我目前最喜欢的编辑器。其插件庞大,只需装一款Go语言插件就能拥有轻量级IDE的能力。

Go语言第一行代码

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

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

代码语言:javascript
复制
package main

import "fmt"

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

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

代码语言:javascript
复制
go run hello.go

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

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

代码语言:javascript
复制
go build hello.go

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

Go语言交叉编译

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

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

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

代码语言:javascript
复制
SET GOOS=linux
SET GOARCH=amd64

再次编译

代码语言:javascript
复制
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这一行版本信息。

关于初始化命令的格式

代码语言:javascript
复制
go mod init + 模块名称

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

本文参与 腾讯云自媒体分享计划,分享自微信公众号。
原始发表:2019-07-29,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 编程之路从0到1 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 环境准备篇
    • 背景
      • Go开发环境搭建
        • 下载
        • 环境配置
      • IDE的选择
        • Go语言第一行代码
          • Go语言交叉编译
            • Go工程管理
            领券
            问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档