前言
Go语言起始于2009年,相较于大多数市场上的编程语言(Python, Java等)都来自90年代的单线程环境,Go的年代已是多核时代.
所以Go语言在多核并发上拥有原生的设计优势,它的并发机制使你的程序可以轻松的从多核互联网中获得最大的收益.
总结来说Go是一种简单,整洁,高效的静态类型的编译语言.
Golang的安装
~下载地址:
官网下载地址: https://golang.org/dl/
官方镜像地址: https://golang.google.cn/dl/(推荐)
~Windows平台安装:
安装教程前景提要: Windows10-64位系统, Go-1.11.5.windows-amd64.msi版本为例
根据下载地址, 下载Windows版本golang的安装包, 如下图:
安装步骤比较简单, 一路next即可,如下图:
~Linux平台安装:
命令下载go语言安装包
wget https://dl.google.com/go/go1.11.5.linux-amd64.tar.gz
命令解压缩到包目录下
tar -zxvf go1.11.5.linux-amd64.tar.gz -C /usr/local
~Mac平台安装:
下载Go-1.11.5.darwin-amd64.pkg可执行文件版安装包, 如图:
下载后是一个pkg的包,直接点击安装即可, 如图:
默认go会安装到/usr/local/go
目录下,如下图:
Go环境安装成功检测
打卡终端程序, 输入go version命令, 如果出现go的版本,证明安装成功
Go-环境变量
前景提要:
从上面步骤中, 相信你已经成功安装了Go, 那这里就说一下, 安装Go之后环境变量的问题.
$GOROOT
: 表示Go在电脑上安装的位置, Windows和Mac平台安装后这个值,会以key($GOROOT):value(Go安装路径)
的形式配置到环境变量中, 以便你打开终端程序后任意一个位置都可以使用go的命令.
Linux平台需要手动配置一下环境变量:
Linux下有两个文件可以配置环境变量,其中/etc/profile
是对所有用户生效;$HOME/.profile
是对当前用户生效, 根据自己的情况自行选择一个文件打开,添加如下两行代码,保存;
export GOROOT=/usr/local/go (go的安装路径)
export PATH= P A T H : PATH: PATH:GOROOT/bin
$GOBIN
: 表示编译器和链接器的安装位置,默认是$GOROOT/bin
$GOARCH:
表示目标及其的处理器架构,它的值可以是386,amd64和arm.
$GOOS:
表示目标处理器的操作系统darwin,freebsd,linux,windows.
$GOARM:
专门针对基于arm架构的处理器,它的值可以是5或6,默认6.
$GOMAXPROCS:
用于设置应用程序可使用的处理器个数与核数.
跨平台编译
go build
命令编译代码为可执行文件, 都是当前系统的可执行文件, 如果你想在Windows平台下编译代码为Linux平台下可执行文件.如下操作即可:
set CGO_ENABLED=0 // 禁用CGO, 使用了CGO的代码是不支持跨平台编译的
set GOOS=linux // 设置编译的目标平台
set GOARCH=amd64 // 设置目标处理器架构是amd64
执行go build之后, 得到的可执行文件就是linux下可执行文件
~Mac平台下编译linux和Windows64位可执行文件
CGO_ENABLED=0 GOOS=linux GOARCH=amd64
CGO_ENABLED=0 GOOS=windows GOARCH=amd64
~Linux平台下编译Mac和Windows64位可执行文件
CGO_ENABLED=0 GOOS=darwin GOARCH=amd64 go build
CGO_ENABLED=0 GOOS=windows GOARCH=amd64 go build
GOPATH
前景提要
小编在这里着重提出来讲解一下go语言中GOPATH的概念,因为小编之前是Python开发者, 所以一直对go语言中的GOPATH概念有些不理解, 经过小编搜寻大量文章和做了大量实验, 在这里给大家分享一下.
小编在研究到这一块的时候, 一直不明白GO MODULE出现之后, 就解决了GOPATH的问题: 那么问题来了
GOPATH的作用是什么?
GOPATH有什么问题?
什么命令什么情况下会用到这个GOPATH?
GOPATH的作用是什么?
这里小编就用windows系统讲解一下GOPATH的作用
GOPATH: 就是你打开windows系统的环境变量栏, 例如下图:
就是一个key-value类型的设置,键是GOPATH,值对应的是路径
如果你的项目中有用到第三方的包, 你用go get 包名 去下载的时候, 这时候go底层会自动将第三方的包自动下载到你gopath下的pkg文件夹中, 就类似于Python中第三方包通常会在Lib文件中的site-packages文件中
然后你在执行go build编译你的项目时, go的编译器会去先找GOPATH,找对应路径下pkg文件中有没有你依赖的第三方的包, 因为你上面go get的时候已经下载了, 所以会找到, 如果你没有提前下载, 就会报找不到依赖的包
总的来说, GOPATH就是针对一些go的命令,例如go get/go build等, 会去根据GOPATH对应的路径下的文件找一些东西
GOPATH有什么问题?
上文我们提到,项目中的依赖的三方包会装在GOPATH下路径的pkg包中,这时会产生一个问题,就是如果你有多个项目开发时,如果多个项目同时依赖一个第三方包,但是所依赖的版本不同.就无法解决
所以这时go module出现了,在go1.11版本之后官方推出的版本管理工具之后,go module是go语言的默认依赖管理工具
GO111MODULE
GO111MODULE有三个可选值:
GO111MODULE=off:禁用模块支持,编译时会从GOPATH和vendor文件夹中查找报
GO111MODULE=on:禁用模块支持,编译时会忽略GOPATH和vendor文件,只根据go.mod下载依赖
GO111MODULE=auto:当项目在GOPATH对应路径下的src文件中时,会开启模块支持
什么命令什么情况下会用到这个GOPATH?
简单来说, 一般go build和go get, go install一些常用的命令都会用到GOPATH对应路径
go mod常用命令
go mod download 下载依赖的module到本地cache(默认为$GOPATH/pkg/mod目录)
go mod edit 编辑go.mod文件
go mod graph 打印模块依赖图
go mod init 初始化当前文件夹, 创建go.mod文件
go mod tidy 增加缺少的module,删除无用的module
go mod vendor 将依赖复制到vendor下
go mod verify 校验依赖
go mod why 解释为什么需要依赖
go.mod文件:
module github.com/Q1mi/studygo/blogger
go 1.13
require (
github.com/DeanThompson/ginpprof v0.0.0-20190408063150-3be636683586
github.com/gin-gonic/gin v1.4.0
github.com/go-sql-driver/mysql v1.4.1
github.com/jmoiron/sqlx v1.2.0
github.com/satori/go.uuid v1.2.0
google.golang.org/appengine v1.6.1 // indirect
)