Go:基础知识(二)

上一篇:Go:基础知识(一)


前言

前情回顾:上一篇主要跟大家简单介绍了一下Go的标识符,标识符是编程语言词法语法的基石,除了列举了Go语言全部的标识符外,还对Go语言比较有特色的几个标识符简单的介绍了一下含义和使用方法。


本文将跟大家介绍一下Go的基础知识的第二部分,Go的环境配置和Go的开发工具GoLand介绍。

一、Go的安装

Go也称为Golang,是一门开源的编程语言,支持多平台安装运行,关于Go的安装说明网上有很多,Go支持源码安装和标准包安装,我这里就不再赘述了。

我个人使用的环境是macOS平台+Go 1.14版本,这也是以后我代码演示的运行环境,截止目前Go的最新版本应该已经支持到了1.16版本,个人感觉1.13以后的版本差距不是很大,安装完成后可以在控制台通过go version查看版本信息:

[qihanlin@MacbookPro ]~ $ go version
go version go1.14 darwin/amd64

二、Go的几个重要的环境变量

2.1 go env

使用go env可以查看当前Go的所有的配置,以我的环境为例:

[qihanlin@MacbookPro ]~ $ go env
GO111MODULE="off"
GOARCH="amd64"
GOBIN=""
GOCACHE="/Users/qihanlin/Library/Caches/go-build"
GOENV="***************" #此处人肉马赛克
GOEXE=""
GOFLAGS=""
GOHOSTARCH="amd64"
GOHOSTOS="darwin"
GOINSECURE=""
GONOPROXY=""
GONOSUMDB=""
GOOS="darwin"
GOPATH="***************" #此处人肉马赛克
GOPRIVATE=""
GOPROXY="***************" #此处人肉马赛克
GOROOT="***************" #此处人肉马赛克
GOSUMDB="sum.golang.org"
GOTMPDIR=""
GOTOOLDIR="***************" #此处人肉马赛克
GCCGO="gccgo"
AR="ar"
CC="clang"
CXX="clang++"
CGO_ENABLED="1"
GOMOD=""
CGO_CFLAGS="-g -O2"
CGO_CPPFLAGS=""
CGO_CXXFLAGS="-g -O2"
CGO_FFLAGS="-g -O2"
CGO_LDFLAGS="-g -O2"
PKG_CONFIG="pkg-config"
GOGCCFLAGS="-fPIC -m64 -pthread -fno-caret-diagnostics -Qunused-arguments -fmessage-length=0 -fdebug-prefix-map=/var/folders/h3/616xcv212f39lfg8l03750hr0000gn/T/go-build661160815=/tmp/go-build -gno-record-gcc-switches -fno-common"

本人用的是Go官方标准包1.14版本,默认安装方式,golang标准包安装很方便,直接下一步就行,这里挑几个重要的环境变量跟大家说明一下。


2.2 Go环境参数说明

GOROOT

GOROOT是Go语言编译、工具、标准库等的安装路径,光看名字就知道这玩意路径很重要,如果使用GoLand开发的话同样要指定GOROOT和下面要提到的GOPATH安装路径。GOROOT指定了GO开发包的安装位置和bin目录,这样能够让编译器通过系统环境变量PATH路径找到GOROOT,从而找到Go的开发包的位置,所以通常需要将GOROOT的bin目录加到PATH路径里面去。

export PATH=$PATH:$GOROOT/bin:$GOPATH

GOPATH

GOPATH是Go语言编程环境里一个算是比较有特点的参数,从 Go 1.8 版本开始,Go 开发包在安装完成后,将 GOPATH 赋予了一个默认的目录。

GOPATH指定了Go编程的工作目录,包含三个文件夹:

  • src:存放源码
  • pkg:存放编译后生成的文件
  • bin:存放编译后可执行文件

这三个文件夹会在我们后面编译运行第一个代码示例的时候再详细讲解,其他的语言好像并没有限定工作目录,但是Go会限定,看到的一种解释是,如果不使用工作目录的概念,在多人开发时,每个人有一套自己的目录结构,读取配置文件的位置不统一,输出的二进制运行文件也不统一,这样会导致开发的标准不统一,影响开发效率。


GO111MODULE

前面说GOPATH的时候提到,golang在1.8版本以后提出了需要将工作目录都放到GOPATH目录下,但很多人并不买账,于是在Go 1.11的时候推出了这个go modules来解决依赖管理的问题。

go modules默认是关闭,可以使修改GO111MODULE为on打开:

export GO111MODULE=on # 开启GoModules

GO111MODULE解释:

  • 当为on时则使用Go Modules,go 会忽略 $GOPATH和 vendor文件夹,只根据go.mod下载依赖。
  • 当为 off时则不适用新特性 Go Modules支持,它会查找 vendor目录和$GOPATH来查找依赖关系,也就是继续使用“GOPATH模式”。
  • 当为 auto时或未设置时则根据当前项目目录下是否存在 go.mod文件或$GOPATH/src之外并且其本身包含go.mod文件时才会使用新特性Go Modules模式。

GOARCH

GOARCH的值的含义是程序构建环境的目标计算架构的标识,也就是程序在构建或安装时所对应的计算架构的名称。在默认情况下,它会与程序运行环境的目标计算架构一致。即它的值会与GOHOSTARCH的值是相同。但如果我们显式的设置了环境变量GOARCH,则它的值就会是这个环境变量的值。


GOBIN

GOBIN的值为存放可执行文件的目录的绝对路径。它的值来自环境变量GOBIN。在我们使用go tool install命令安装命令源码文件时生成的可执行文件会存放于这个目录中。


GOCHAR

GOCHAR的值是程序构建环境的目标计算架构的单字符标识。它的值会根据GOARCH的值来设置。当GOARCH的值为386时,GOCHAR的值就是8。当GOARCH的值为amd64时GOCHAR的值就是6。而GOCHAR的值5与GOARCH的值arm相对应。

GOCHAR主要有两个用途,列举如下:

  • Go语言官方的平台相关的工具的名称会以它的值为前缀。的名称会以GOCHAR的值为前缀。比如,在amd64计算架构下,用于编译Go语言代码的编译器的名称是6g,链接器的名称是6l。用于编译C语言代码的编译器的名称是6c。而用于编译汇编语言代码的编译器的名称为6a。
  • Go语言的官方编译器生成的结果文件会以GOCHAR的值作为扩展名。Go语言的官方编译器6g在对命令源码文件编译之后会把结果文件go.6存放到临时工作目录的相应位置中。

GOEXE

GOEXE的值会被作为可执行文件的后缀。它的值与GOOS的值存在一定关系,即只有GOOS的值为“windows”时GOEXE的值才会是“.exe”,否则其值就为空字符串“”。这与在各个操作系统下的可执行文件的默认后缀是一致的。


GOHOSTARCH

GOHOSTARCH的值的含义是程序运行环境的目标计算架构的标识,也就是程序在运行时所在的计算机系统的计算架构的名称。在通常情况下,它的值不需要被显式的设置。因为用来安装Go语言的二进制分发文件和MSI(Microsoft软件安装)软件包文件都是平台相关的。所以,对于不同计算架构的Go语言环境来说,它都会是一个常量。


GOHOSTOS

GOHOSTOS的值的含义是程序运行环境的目标操作系统的标识,也即程序在运行时所在的计算机系统的操作系统的名称。与GOHOSTARCH类似,它的值在不同的操作系统下是固定不变的,同样不需要显式的设置。


GOTOOLDIR

GOTOOLDIR的值指明了Go工具目录的绝对路径。根据GOROOT、GOHOSTOS和GOHOSTARCH来设置。其值为$GOROOT/pkg/tool/$GOOS_$GOARCH


三、GoLand的简介

GoLand 是 JetBrains 公司推出的 Go 语言集成开发环境。GoLand 同样基于 IntelliJ 平台开发,支持 JetBrains 的插件体系。不得不说JetBrains是个伟大的公司,简直就是程序员的福音呀,GoLand是款功能强大的开发工具,这里就不教唆大家干坏事了,支持正版!
在这里插入图片描述


总结

结束语:其实本来不太想说一些环境的安装和工具的使用,因为网上的教程其实有很多,考虑到通篇的完备性,而且有些关键性的东西还是要明确的,还是这里跟大家聊聊,也欢迎大家在留言一起交流。
上一篇:Go:基础知识(一)

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值