阅读目录
golang开发工具
- Json 转 Go Struct
- Sql 转 Go Struct
- Yaml 转 Go Struct
- URL编码解码
- 汉字、Unicode互转
- 时间戳
- Json
- Base64
- Md5
http://www.golangs.cn
常用命令
Go查看和修改环境变量
输出 go 环境有关的信息
go env
查看具体详情命令
go help environment
查看指定变量
go env 变量名
例如
go env CC
修改变量
go env -w 变量名=变量值
例如
go env -w CC="arm-linux-gnueabi-gcc"
命令行
CHCP 65001 就设置成 utf-8 编码。
PS E:\gormlearn\gormtest> CHCP 65001
Go 依赖管理
go mod tidy
的作用是把项目所需要的依赖添加到 go.mod,并删除 go.mod中,没有被项目使用的依赖。
go list -m all
列出当前模块及其所有依赖项
go mod 命令
命令 | 作用 |
---|---|
download | download modules to local cache (下载依赖的 module 到本地 cache) |
edit | edit go.mod from tools or scripts (编辑 go.mod 文件) |
graph | edit go.mod from tools or scripts (编辑 go.mod 文件) |
init | intalize new module in curent directory (在当前文件夹下初始化一个新的module, 创建 go.mod 文件) |
tidy | add missing and remove unused modules (增加丢失的 module,去掉未用的module) |
vendor | make vendored copy of dependencies (将依赖复制到 vendor 下) |
verify | verify dependencies have expectd content (校验依赖 检查下载的第三方库有没有本地修改,如果有修改,则会返回非 0,否则验证成功。) |
why | explain why packges or modules are needed (解释为什么需要依赖) |
env
GO111MODULE
GO111MODULE 是 Go 1.11 引入的新版模块管理方式。
GO111MODULE 环境变量用于开启或关闭 Go 语言中的模块支持,它有 off、on、auto 三个可选值,默认为 auto。
1 GO111MODULE=off
无模块支持,go 会从 $GOPATH 文件夹和 vendor 目录中寻找依赖项。
2 GO111MODULE=on
模块支持,go 忽略 $GOPATH 文件夹,只根据 go.mod 下载依赖。
4 GO111MODULE=auto
在 $GOPATH/src 外层且根目录有 go.mod 文件时,开启模块支持;否者无模块支持。
go env -w GO111MODULE=on
Go 设置国内镜像源
go env -w GOPROXY=https://goproxy.cn,direct
golang 的国内镜像源
阿里云:https://mirrors.aliyun.com/goproxy
微软:https://goproxy.io
七牛云:https://goproxy.cn
GoCenter:https://gocenter.io
设置 go env 中的内容
1)、比如这个 GOOS:编译代码的操作系统名称,和 go build 搭配使用。
GOOS=windows
go build 命令执行后生成了一个供 windows 使用的 projectName.exe 文件。
2)、我们要改成在 linux下执行的文件,命令 SET。
SET GOOS=linux
go build 命令执行后生成了一个供 linux 执行的 projectName 文件。
Golang 环境变量整理(go env)
名称 | 说明 |
---|---|
CGO_ENABLED | 指明cgo工具是否可用的标识。 |
GOARCH | 程序构建环境的目标计算架构。 |
GOBIN | 存放可执行文件的目录的绝对路径。 |
GOCHAR | 程序构建环境的目标计算架构的单字符标识。 |
GOEXE | 可执行文件的后缀。 |
GOHOSTARCH | 程序运行环境的目标计算架构。 |
GOOS | 程序构建环境的目标操作系统。 |
GOHOSTOS | 程序运行环境的目标操作系统。 |
GOPATH | 工作区目录的绝对路径。 |
GORACE | 用于数据竞争检测的相关选项。 |
GOROOT | Go语言的安装目录的绝对路径。 |
GOTOOLDIR | Go工具目录的绝对路径。 |
GOBIN 说明
GOBIN 是一个环境变量,用于指定 Go 二进制文件(可执行文件)的安装目录。
如果未指定 GOBIN,则默认将可执行文件安装到 $GOPATH/bin 目录下。
如果你想为 GOBIN 指定一个新的目录,可以在终端中运行以下命令(例如,将可执行文件安装到 /usr/local/bin 目录下):
export GOBIN=/usr/local/bin
如果想要永久配置 GOBIN,可以将上述命令添加到 shell 配置文件(例如,.bashrc 或者 .zshrc)中。
需要注意的是,只有在运行 go install 命令时才会用到 GOBIN 环境变量,而在运行 go build 命令时不会使用 GOBIN 环境变量。
[root@bogon bin]# vi ~/.bashrc
centos 全局配置GOBIN
[root@bogon bin]# vi /etc/profile
[root@bogon bin]# source /etc/profile
[root@bogon bin]#
git
git checkout .
此命令检出版本库最新的代码,并放弃本地修改。
回退命令
$ git reset --hard HEAD^ 回退到上个版本
$ git reset --hard HEAD~3 回退到前3次提交之前,以此类推,回退到n次提交之前
$ git reset --hard commit_id 退到/进到 指定commit的sha码
强推到远程:
$ git push origin HEAD --force
Golang 清除 go get 的包
# 下载包
go get -u go clean -i github.com/werbenhu/go-tools
# 清理包
go clean -i github.com/werbenhu/go-tools...
# 清理全部包
go clean --modcache
Golang 热加载报错 command not found:fresh 解决方案
总会遇到“ 不是内部或外部命令,也不是可运行的程序或批处理文件。”或者“command not found:fresh”。
解决方案:
第一步:打开任意一处终端,用 go env 命令查看,如果 GO111MODULE=auto,将这一行改成 GO111MODULE=on
。
第二步:go install github.com/pilu/fresh@latest
。
第三步:go mod init <你的项目名称>
。
第四步:go get github.com/pilu/fresh
。
紧接着直接 fresh
就行了。
交叉编译
所谓的交叉编译,是指在一个平台上就能生成可以在另一个平台运行的代码,例如,我们可以32位的Windows操作系统开发环境上,生成可以在64位Linux操作系统上运行的二进制程序。
在其他编程语言中进行交叉编译可能要借助第三方工具,但在Go语言进行交叉编译非常简单,最简单只需要设置 GOOS
和 GOARCH
这两个环境变量就可以了。
GOOS 与 GOARCH
GOOS的默认值是我们当前的操作系统, 如果windows,linux,注意 mac os 操作上的值是darwin。
GOARCH则表示CPU架构,如 386,amd64,arm等。
获取 GOOS 和 GOARCH 的值
我们可以使用go env命令获取当前GOOS和GOARCH的值。
$ go env GOOS GOARCH
Windows env
PS C:\WINDOWS\system32> go env
set GO111MODULE=on
set GOARCH=amd64
set GOBIN=
set GOCACHE=C:\Users\Administrator\AppData\Local\go-build
set GOENV=C:\Users\Administrator\AppData\Roaming\go\env
set GOEXE=.exe
set GOEXPERIMENT=
set GOFLAGS=
set GOHOSTARCH=amd64
set GOHOSTOS=windows
set GOINSECURE=
set GOMODCACHE=C:\Users\Administrator\go\pkg\mod
set GONOPROXY=
set GONOSUMDB=
set GOOS=windows
set GOPATH=C:\Users\Administrator\go
set GOPRIVATE=
set GOPROXY=https://goproxy.cn,direct
set GOROOT=C:\Users\Administrator\.g\go
set GOSUMDB=sum.golang.org
set GOTMPDIR=
set GOTOOLDIR=C:\Users\Administrator\.g\go\pkg\tool\windows_amd64
set GOVCS=
set GOVERSION=go1.20
set GCCGO=gccgo
set GOAMD64=v1
set AR=ar
set CC=gcc
set CXX=g++
set CGO_ENABLED=1
set GOMOD=NUL
set GOWORK=
set CGO_CFLAGS=-O2 -g
set CGO_CPPFLAGS=
set CGO_CXXFLAGS=-O2 -g
set CGO_FFLAGS=-O2 -g
set CGO_LDFLAGS=-O2 -g
set PKG_CONFIG=pkg-config
set GOGCCFLAGS=-m64 -mthreads -Wl,--no-gc-sections -fmessage-length=0 -fdebug-prefix-map=C:\Users\ADMINI~1\AppData\Local\Temp\go-build682908498=/tmp/go-build -gno-record-gcc-switches
PS C:\WINDOWS\system32>
Mac env
wghen@Mac bin % go env
GO111MODULE="auto"
GOARCH="amd64"
GOBIN=""
GOCACHE="/Users/wghen/Library/Caches/go-build"
GOENV="/Users/wghen/Library/Application Support/go/env"
GOEXE=""
GOEXPERIMENT=""
GOFLAGS=""
GOHOSTARCH="amd64"
GOHOSTOS="darwin"
GOINSECURE=""
GOMODCACHE="/Users/wghen/go/pkg/mod"
GONOPROXY=""
GONOSUMDB=""
GOOS="darwin"
GOPATH="/Users/wghen/go"
GOPRIVATE=""
GOPROXY="https://goproxy.cn,direct"
GOROOT="/usr/local/go"
GOSUMDB="sum.golang.org"
GOTMPDIR=""
GOTOOLDIR="/usr/local/go/pkg/tool/darwin_amd64"
GOVCS=""
GOVERSION="go1.20.2"
GCCGO="gccgo"
GOAMD64="v1"
AR="ar"
CC="clang"
CXX="clang++"
CGO_ENABLED="1"
GOMOD=""
GOWORK=""
CGO_CFLAGS="-O2 -g"
CGO_CPPFLAGS=""
CGO_CXXFLAGS="-O2 -g"
CGO_FFLAGS="-O2 -g"
CGO_LDFLAGS="-O2 -g"
PKG_CONFIG="pkg-config"
GOGCCFLAGS="-fPIC -arch x86_64 -m64 -pthread -fno-caret-diagnostics -Qunused-arguments -fmessage-length=0 -fdebug-prefix-map=/var/folders/2s/1qxv2tsx4cq8x5x3x8z912d80000gn/T/go-build1876170266=/tmp/go-build -gno-record-gcc-switches -fno-common"
wghen@Mac bin % pwd
/Users/wghen/go/bin
wghen@Mac bin %
GOOS 和 GOARCH 的取值范围
GOOS 和 GOARCH 的值成对出现,而且只能是下面列表对应的值。
$GOOS $GOARCH
android arm
darwin 386
darwin amd64
darwin arm
darwin arm64
dragonfly amd64
freebsd 386
freebsd amd64
freebsd arm
linux 386
linux amd64
linux arm
linux arm64
linux ppc64
linux ppc64le
linux mips
linux mipsle
linux mips64
linux mips64le
linux s390x
netbsd 386
netbsd amd64
netbsd arm
openbsd 386
openbsd amd64
openbsd arm
plan9 386
plan9 amd64
solaris amd64
windows 386
windows amd64
示例
编译在64位Linux操作系统上运行的目标程序。
$ GOOS=linux GOARCH=amd64 go build main.go
编译arm架构Android操作上的目标程序
$ GOOS=android GOARCH=arm GOARM=7 go build main.go