Go从入门到放弃
2023-02-17
教程来自:https://www.liwenzhou.com/posts/Go/go_menu/
基本命令
go mod init **** // 项目初始化
go build // 编译,可选参数-o指定编译后名称
go run **** // 直接执行程序,该命令本质上也是先编译再执行。
go install // 安装:编译后移动至GO目录中的Bin下,系统配置环境变量后,可任意位置执行
跨平台编译
Windows
SET CGO_ENABLED=0 // 禁用CGO
SET GOOS=linux // 目标平台是linux
SET GOARCH=amd64 // 目标处理器架构是amd64
Mac 下编译 Linux 和 Windows平台 64位 可执行程序:
CGO_ENABLED=0 GOOS=linux GOARCH=amd64 go build
CGO_ENABLED=0 GOOS=windows GOARCH=amd64 go build
Linux 下编译 Mac 和 Windows 平台64位可执行程序:
CGO_ENABLED=0 GOOS=darwin GOARCH=amd64 go build
CGO_ENABLED=0 GOOS=windows GOARCH=amd64 go build
Windows下编译Mac平台64位可执行程序:
SET CGO_ENABLED=0
SET GOOS=darwin
SET GOARCH=amd64
go build
依赖管理 - go module
go module是go官方自带的go依赖管理库,在1.13版本正式推荐使用
go module可以将某个项目(文件夹)下的所有依赖整理成一个 go.mod 文件,里面写入了依赖的版本等
使用go module之后我们可不用将代码放置在src下了
开启 go module
1.13+版本判断开不开启MODULE的依据是根目录下有没有go.mod文件
手动开启
windows:
set GO111MODULE=on
mac:
export GO111MODULE=on
然后输入
go env
查看 GO111MODULE 选项
为 on 代表修改成功
GOPROXY设置
https://github.com/goproxy/goproxy.cn/blob/master/README.zh-CN.md
go mod命令
go mod download 下载依赖的module到本地cache(默认为$GOPATH/pkg/mod目录)
go mod edit 编辑go.mod文件
go mod graph 打印模块依赖图
go mod init 初始化当前文件夹, 创建go.mod文件
go mod tidy 增加缺少的module,删除无用的module
go mod vendor 将依赖复制到vendor下
go mod verify 校验依赖
go mod why 解释为什么需要依赖
go.mod文件说明
go.mod文件记录了项目所有的依赖信息
module用来定义包名
require用来定义依赖包及版本
indirect表示间接引用
go get
在项目中执行go get命令可以下载依赖包,并且还可以指定下载的版本。
运行go get -u将会升级到最新的次要版本或者修订版本(x.y.z, z是修订版本号, y是次要版本号)
运行go get -u=patch将会升级到最新的修订版本
运行go get package@version将会升级到指定的版本号version
如果下载所有依赖可以使用go mod download命令。
项目中使用go module
go mod init
go get
变量
声明
var 变量名 变量类型
var name string
var age int
var isOk bool
OR
var (
a string
b int
c bool
d float32
)
初始化
var 变量名 类型 = 表达式
var name string = "Q1mi"
var age int = 18
OR
var name, age = "Q1mi", 20
OR
// 类型推导
var name = "Q1mi"
var age = 18
短变量声明
n := 10
匿名变量
func foo() (int, string) {
return 10, "Q1mi"
}
func main() {
// 忽略第二个值
x, _ := foo()
// 忽略第一个值
_, y := foo()
fmt.Println("x=", x)
fmt.Println("y=", y)
}
匿名变量不占用命名空间,不会分配内存,所以匿名变量之间不存在重复声明 注意:
函数外的每个语句都必须以关键字开始(var、const、func等)
:=不能使用在函数外。
_多用于占位,表示忽略值。