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
相关推荐
向宇it18 分钟前
fastadmin搜索刷新列表,怎么限制用户频繁点击?
开发语言·前端·javascript·fastadmin
wjs20241 小时前
CSS3 字体
开发语言
Byron Loong2 小时前
c# 子类继承父类接口问题
开发语言·c#
2301_775602382 小时前
C++11 多线程编程-小白零基础到手撕线程池
开发语言·c++
码农豆豆3 小时前
11.C++程序中的常用函数
开发语言·c++·算法
无极程序员3 小时前
读取到json数据拿出来,修改后重新写入json文件
android·java·开发语言·后端·json·php
艾伦~耶格尔3 小时前
Java 之 ssm框架入门
java·开发语言·后端·spring·mybatis·ssm
尘浮生3 小时前
Java项目实战II基于Java+Spring Boot+MySQL的美容院管理系统设计与实现(源码+数据库+文档)
java·开发语言·数据库·spring boot·mysql·maven·intellij-idea
jcfszxc3 小时前
【Rockchip系列】RGA imcopy 性能分析:不同缓冲区拷贝的对比(含实验代码)
开发语言·c++·rknn·rockchip·rknn-toolkit2
GSCSDNeo3 小时前
9.23 My_string.cpp
开发语言·c++