RE什么是Go语言
- Google开源
- 编译型语言
- 编译型语言: 代码👉🏻解释器(虚拟机)👉🏻处理器
- 解释型语言:代码👉🏻处理器
- 21世纪的C语言
- 支持交叉编译
- 开发效率高
- 支持高并发
- 执行性能好
下载安装,配置环境变量
- 直接从官网下载最新即可
- 使用VScode编辑器,或者其他
环境变量
ZEN@DESKTOP-0G2UB36 D:/Users/wangy/Desktop go version
go version go1.16.3 windows/amd64
- 删除默认GOPATH 添加新创建的GOPATH(1.14之后的新版本中启用了Go Module模式 ,此步骤为非必要)
- GOPATH目录结构
目录: D:\Users\wangy\Documents\HBSI\go
Mode LastWriteTime Length Name
---- ------------- ------ ----
d----- 2021/04/14 9:19 bin
d----- 2021/04/14 9:19 pkg
d----- 2021/04/14 9:19 src
ZEN@DESKTOP-0G2UB36 D:/Users/wangy/Documents/HBSI/go/tree
卷 软件 的文件夹 PATH 列表
卷序列号为 E709-DB9D
D:.
├─bin
├─pkg
└─src
└─github.com
└─Yunak
└─go01
配置代理
国内常用的GO代理
各个代理首页
设置PROXY后,安装所需依赖(使用VScode一直安装失败可直接再$GOPATH
中执行以下命令安装)
go get -v github.com/fatih/gomodifytags
go get -v github.com/haya14busa/goplay/cmd/goplay
go get -v honnef.co/go/tools/cmd/staticcheck
go get -v github.com/josharian/impl
go get -v github.com/go-delve/delve/cmd/dlv
···部分安装命令,详细可从vscode中查看
Go 版本是 1.13 及以上
$ go env -w GO111MODULE=on
$ go env -w GOPROXY=https://goproxy.cn,direct
其他版本
$ export GO111MODULE=on
$ export GOPROXY=https://goproxy.cn
- 取消代理
$ go env -u GOPROXY
查看GO的配置
$ go env
#以JSON格式输出
$ go env -json
Go Mod是什么
- go mod 是Golang 1.11 版本引入的官方包(package)依赖管理工具,用于解决之前没有地方记录依赖包具体版本的问题,方便依赖包的管理。
之前Golang 主要依靠vendor和GOPATH来管理依赖库,vendor相对主流,但现在官方更提倡go mod。 - go mod初始化及使用
Golang 提供一个环境变量 GO111MODULE 来设置是否使用mod,它有3个可选值,分别是off, on, auto(默认值),具体含义如下:- off: GOPATH mode,查找vendor和GOPATH目录
- on:module-aware mode,使用 go module,忽略GOPATH目录
- auto:如果当前目录不在$GOPATH 并且 当前目录(或者父目录)下有go.mod文件,则使用 GO111MODULE, 否则仍旧使用 GOPATH mode。
修改 GO111MODULE 的值的语句是:set GO111MODULE=on 。一般保持auto就行,建议设置为on
首先main入口代码所在文件夹创建mod
- 创建语句
go mod init [module name]
编译
go bulid
- 在项目目录下执行
go build
- 在其他路径下执行,需要在后面加上项目路径可从
$GOPATH/src
写起,编译后的文件保存在当前路径下 go build -o filename
go run
像执行脚本一样执行Go源码
go install
- 先编译为一个可执行文件
- 将可执行文件复制到
$GOPATH/bin
交叉编译
window编译linux mac win
SET CGO_ENABLED=0 #禁用csgo
SET GOOS=linux #目标平台 darwin(mac) windows(win)
SET GOARCH=adm64 #平台架构
Linux 下编译 Mac 和 Windows 平台64位可执行程序:
CGO_ENABLED=0 GOOS=darwin GOARCH=amd64 go build
CGO_ENABLED=0 GOOS=windows GOARCH=amd64 go build
Golang 支持在一个平台下生成另一个平台可执行程序的交叉编译功能
Mac下编译Linux, Windows平台的64位可执行程序:
CGO_ENABLED=0 GOOS=linux GOARCH=amd64 go build test.go
CGO_ENABLED=0 GOOS=windows GOARCH=amd64 go build test.go
Linux下编译Mac, Windows平台的64位可执行程序:
CGO_ENABLED=0 GOOS=darwin GOARCH=amd64 go build test.go
CGO_ENABLED=0 GOOS=windows GOARCH=amd64 go build test.go
Windows下编译Mac, Linux平台的64位可执行程序:
SET CGO_ENABLED=0SET GOOS=darwin3 SET GOARCH=amd64 go build test.go
SET CGO_ENABLED=0 SET GOOS=linux SET GOARCH=amd64 go build test.go
注:如果编译web等工程项目,直接cd到工程目录下直接执行以上命令
GOOS:目标可执行程序运行操作系统,支持 darwin,freebsd,linux,windows
GOARCH:目标可执行程序操作系统构架,包括 386,amd64,arm
go build [-o 输出名] [-i] [编译标记] [包名]
指令解析
-o 指定输出文件
-a 强行对所有涉及到的代码包(包括标准库中的代码包)进行重新构建,即使它们已经是最新的了
-n 打印构建期间所用到的其它命令,但是并不真正执行它们
-p n 构建的并行数量(n)。默认情况下并行数量与CPU数量相同
-race 开启数据竞争检测。此标记目前仅在linux/amd64、darwin/amd64和windows/amd64平台下被支持
-v 打印出被构建的代码包的名字
-work 打印出临时工作目录的名字,并且取消在构建完成后对它的删除操作
-x 打印出构建期间所用到的其命令
编译
Windows编译Linux可执行文件
如果我想在Windows下编译一个Linux下可执行文件,那需要怎么做呢?只需要在编译时指定目标操作系统的平台和处理器架构即可。
注意:无论你在Windows电脑上使用VsCode编辑器还是Goland编辑器,都要注意你使用的终端类型,因为不同的终端下命令不一样!!!目前的Windows通常默认使用的是
PowerShell
终端。
如果你的Windows
使用的是cmd
,那么按如下方式指定环境变量。
SET CGO_ENABLED=0 // 禁用CGO
SET GOOS=linux // 目标平台是linux
SET GOARCH=amd64 // 目标处理器架构是amd64
如果你的Windows
使用的是PowerShell
终端,那么设置环境变量的语法为
$ENV:CGO_ENABLED=0
$ENV:GOOS="linux"
$ENV:GOARCH="amd64"
在你的Windows
终端下执行完上述命令后,再执行下面的命令,得到的就是能够在Linux平台运行的可执行文件了。
go build
Windows编译Mac可执行文件
Windows下编译Mac平台64位可执行程序:
cmd终端下执行:
SET CGO_ENABLED=0
SET GOOS=darwin
SET GOARCH=amd64
go build
PowerShell终端下执行:
$ENV:CGO_ENABLED=0
$ENV:GOOS="darwin"
$ENV:GOARCH="amd64"
go build
Mac编译Linux可执行文件
Mac电脑编译得到Linux平台64位可执行程序:
CGO_ENABLED=0 GOOS=linux GOARCH=amd64 go build
Mac编译Windows可执行文件
Mac电脑编译得到Windows平台64位可执行程序:
CGO_ENABLED=0 GOOS=windows GOARCH=amd64 go build
Linux编译Mac可执行文件
Linux平台下编译Mac平台64位可执行程序:
CGO_ENABLED=0 GOOS=darwin GOARCH=amd64 go build
Linux编译Windows可执行文件
Linux平台下编译Windows平台64位可执行程序:
CGO_ENABLED=0 GOOS=windows GOARCH=amd64 go build
- 跨平台编译 ```shell CGO_ENABLED=0 GOOS=linux GOARCH=amd64 go build -ldflags ‘-s -w —extldflags “-static -fpic”‘ main.go
GOOS=linux go build -tags release -a -ldflags “-linkmode external -extldflags -static” -o supervisord
CGO_ENABLED 这个参数默认为1,开启CGO。需要指定为0来关闭,因为CGO不支持交叉编译。<br />GOOS 和 GOARCH 用来指定要构建的平台为Linux
```shell
-s -w 去掉调试信息,可以减小构建后文件体积,
--extldflags "-static -fpic" 完全静态编译[2],这样编译生成的文件就可以任意放到指定平台下运行,而不需要运行环境配置。