1. go 环境与命令

1. go 环境搭建

SDK 安装

  1. Go 官网:golang.org
  2. Go 中文社区:https://studygolang.com/dl
  3. Go API文档:https/golang.org 或 https://studygolang.com/pkgdoc

目录

  • api :api 存放
  • bin:go命令
  • src:go源码目录

2. go 命令

2.1 go build

  1. 编译当前目当目录
bash 复制代码
go build
或
go build .
  1. 编译指定文件或目录
bash 复制代码
#编译main文件,将会生成可指行文件
go build ./main.go
#编译指定文件pl,不会产生编译文件,仅进行编译查检查
go build ./pl
  1. main包有多个文件的情况,指定文件编译main包
bash 复制代码
#编译时必须指定main包的所有文件
go build ./main.go ./hello.go
  1. 编译时指定编译结果输出
bash 复制代码
go build -o ./out/app ./main.go ./hello.go

2.2 go run

bash 复制代码
#直接编译运行
go run
#指定main包所有关联文件
go run ./main.go ./hello.go
#指定main包所在目录
go run .

2.3 go install/get/clean

bash 复制代码
#安装可执行插件
go install github.com/google/gops@latest
#获取模块信息并更新go.mod文件,若本地缓存没有该模块,则下载模块;若有则直接引用
go get github.com/gin-gonic/gin@v1.9.0
#更新模块依赖,并更新go.mod
go get -u github.com/gin-gonic/gin@v1.9.0
#清理临时目录中的文件,age:清理整个module下载的缓存文件
go clean -mocache

2.4 gofmt

bash 复制代码
#格式化代码并输入
gofmt -w test.go

2.3 交叉编译

交叉编译需要修改三个环境变量:GOOS、GOARCH、CGO_ENABLED

GOOS:目标平台的操作系统(drwin、freebsd、linux、windows)

GOARCH:目标平台的体系架构32位不是64位(386、adm54、arm)

CGO_ENABLED:是否启用CGO,交叉编译不支持CGO,所以要禁用它

bash 复制代码
1.windows 编译 Linux 或 Mac 可执行程序
# 设置环境变量
$Env:CGO_ENABLED=0;$Env:GOARCH="amd64";$Env:GOOS="linux"
$Env:CGO_ENABLED=0;$Env:GOARCH="amd64";$Env:GOOS="darwin"
# 编译并输出app文件
go build -o ./out/app .
# mac 编译 linux 或 windows 可执行程序
CGO_ENABLED=0 GOOS=linux GOARCH=amd64 go build -o ./out/app .
CGO_ENABLED=0 GOOS=windows GOARCH=amd64 go build -o ./out/app .
# Linux 编译 mac 与 windows 可执行程序
CGO_ENABLED=0 GOOS=darwin GOARCH=amd64 -o ./out/app .
CGO_ENABLED=0 GOOS=windows GOARCH=amd64 -o ./out/app .

3. go mod 依赖管理

3.1 go.mod 文件

bash 复制代码
# 禄始化代码
go mod init gomod
go 复制代码
//指定 module 名
module gomod
//指定 go sdk 版本
go 1.23.1
//当前module(项目)依赖的包,通过 require 指定
require(
	github.com/bytedance/sonic v1.8.0 // indirect
)
//排除第三方包,在确认第三方依赖某个版本存在bug的情况下,可以采用排除的方式
exclude(
// dependency latest
)
//修改依依赖包的路径或版本,当依赖包发生迁移或者原始包访问不到需要使用代理进,
//通过 replace 替换原始包的咱径和版本
//可以将依赖包替换为本地包
replace(
//	source latest => target latest
)
//当前项目作为其它的项目的依赖时,如果某个版本出现问题,撤销该版本
retract(
	v1.0.0
	v1.0.2
)

3.2 go mod 命令

bash 复制代码
#将模块下载到本地缓存,需要指定模块路径及版本号
go mod download github.com/gin-gonic/gin@v1.9.0
#初始化一个新的模块到当前目录
go mod init gomodcase
#依赖对齐:添加缺少的依赖,删除未使用的赖
go mod tidy
#通过工具或脚本编辑go.mod
#添加依赖项
go mod edit -require="github.com/gin-gonic/gin@v1.9.0"
#替换路径,old[@version] 替换成 new[@version]
go mod edit -replace="golang.org/x/crypto@v0.0.0=github.com/golang/crypto@v1.2.3"
#排除第三方依赖的某个版本
go mod edit -exclude="github.com/gin-gonic/gin@v1.9.0"
#当前项目作为其他项目的依赖时,添加撤回版本用于排除有问题的版本
go mod edit -retract="v1.1.0"
#删除撤回版本记录
go mod edit -dropretract="v1.1.0"

#根据go.mod中的依赖项制作vendor副本,有了vendor副本,项目将不再依赖本地缓存
go mod vendor
#验证依赖是否正确
go mod verify
#返回对指定模块的依赖关系最短路径,解释为什么依赖指定包
go mod why github.com/gin-contrib/sse
相关推荐
偷星星的贼111 分钟前
C++中的访问者模式实战
开发语言·c++·算法
莫问前路漫漫20 分钟前
Java Runtime Environment(JRE)全解析:Java 程序跨平台运行的核心基石
java·开发语言
进阶小白猿22 分钟前
Java技术八股学习Day22
java·开发语言·学习
蒟蒻的贤26 分钟前
操作系统复习
java·开发语言·数据库
码界奇点32 分钟前
基于Spring Boot与Vue的校园后台管理系统设计与实现
vue.js·spring boot·后端·毕业设计·源代码管理
爱编程的小庄35 分钟前
Rust 发行版本及工具介绍
开发语言·后端·rust
lsx20240636 分钟前
SVN 检出操作详解
开发语言
一晌小贪欢42 分钟前
Python 对象的“Excel 之旅”:使用 openpyxl 高效读写与封装实战
开发语言·python·excel·表格·openpyxl·python办公·读取表格
赵八斤44 分钟前
java 项目中配置多个数据源
java·开发语言·数据库
txinyu的博客1 小时前
解析muduo源码之 StringPiece.h
开发语言·网络·c++