RE什么是Go语言
- Google开源
- 编译型语言
- 编译型语言: 代码👉🏻解释器(虚拟机)👉🏻处理器
- 解释型语言:代码👉🏻处理器
- 21世纪的C语言
- 支持交叉编译
- 开发效率高
- 支持高并发
- 执行性能好
下载安装,配置环境变量
- 直接从官网下载最新即可
- 使用VScode编辑器,或者其他
环境变量
ZEN@DESKTOP-0G2UB36 D:/Users/wangy/Desktop go versiongo version go1.16.3 windows/amd64
- 删除默认GOPATH 添加新创建的GOPATH(1.14之后的新版本中启用了Go Module模式 ,此步骤为非必要)

- GOPATH目录结构

目录: D:\Users\wangy\Documents\HBSI\goMode LastWriteTime Length Name---- ------------- ------ ----d----- 2021/04/14 9:19 bind----- 2021/04/14 9:19 pkgd----- 2021/04/14 9:19 srcZEN@DESKTOP-0G2UB36 D:/Users/wangy/Documents/HBSI/go/tree卷 软件 的文件夹 PATH 列表卷序列号为 E709-DB9DD:.├─bin├─pkg└─src└─github.com└─Yunak└─go01
配置代理
国内常用的GO代理
各个代理首页
设置PROXY后,安装所需依赖(使用VScode一直安装失败可直接再$GOPATH中执行以下命令安装)
go get -v github.com/fatih/gomodifytagsgo get -v github.com/haya14busa/goplay/cmd/goplaygo get -v honnef.co/go/tools/cmd/staticcheckgo get -v github.com/josharian/implgo 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 #禁用csgoSET GOOS=linux #目标平台 darwin(mac) windows(win)SET GOARCH=adm64 #平台架构
Linux 下编译 Mac 和 Windows 平台64位可执行程序:
CGO_ENABLED=0 GOOS=darwin GOARCH=amd64 go buildCGO_ENABLED=0 GOOS=windows GOARCH=amd64 go build
Golang 支持在一个平台下生成另一个平台可执行程序的交叉编译功能
Mac下编译Linux, Windows平台的64位可执行程序:
CGO_ENABLED=0 GOOS=linux GOARCH=amd64 go build test.goCGO_ENABLED=0 GOOS=windows GOARCH=amd64 go build test.go
Linux下编译Mac, Windows平台的64位可执行程序:
CGO_ENABLED=0 GOOS=darwin GOARCH=amd64 go build test.goCGO_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.goSET 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 // 禁用CGOSET GOOS=linux // 目标平台是linuxSET 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=0SET GOOS=darwinSET GOARCH=amd64go 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],这样编译生成的文件就可以任意放到指定平台下运行,而不需要运行环境配置。
