Go 语言学习之 go tool

简介: Go 语言学习之 go tool

01

概念


在 Go 语言中,为了方便工程师写程序,提供了一些内置命令行工具,例如 fmt 可以格式化代码,统一代码风格;vet 检测代码的常见错误;build 编译代码,生成可执行程序;run 编译并立即执行可执行程序......


02

包的下载 get


在 Go 程序实际项目开发中,通常我们会导入一些三方包,通过使用关键字 import 和包的导入路径。不过这些包需使用 go get 下载,使用 go get 完成包的下载后,它会构建并安装。


go get 命令还有一些子命令,比如 -d、-f、-t、-u... 如果使用子命令 -u,go get 会将它访问的所有包(包括依赖项)更新到最新版本,然后再构建和安装。如果不使用子命令 -u,直接使用 go get 下载包时,如果本地已存在要下载的包,将会直接使用本地已存在的包。


子命令
描述
-d
仅下载,不安装
-f
和 -u 配合,强制更新,不检查是否过期
-t
下载测试代码所需的依赖包
-u
更新包,包括他们的依赖项
-v
输出详细信息
insecure
使用 http 等非安全协议


03

包的编译


  • build
    go build 如果没有提供参数,会默认使用当前目录作为参数。还可以使用指定目录编译,可以使用导入路径或一个相对目录名,目录必须以 “.” 或 “..” 开头。go build 默认每次都会重新编译除标准库以外的所有依赖包。


       交叉编译:

通常我们在 Windows 或 Mac OS 操作系统平台下开发,但是服务器一般是 Linux 系统,在一个平台下编译出其它平台可以运行的可执行文件,就需要使用交叉编译。不过自从 Go1.5 版本开始实现自举后,交叉编译也变得更加方便,只需要使用 GOOS、GOARCH 环境变量指定目标平台和架构。


       条件编译:

在实际项目开发中,可能有些文件是针对特定的平台和架构开发的,在编译过程中,也需要根据平台和架构的条件进行编译。


条件编译有三种方式,分别是:在文件名中以下划线分隔添加 GOOS 和 GOARCH,或者二者选其一;在源码文件中,package 包声明前面添加 build 指令(它是文档注释),并且与 package 包声明之间空一行,多条 build 指令表示 AND 条件,单条指令中,空格表示 OR 条件,逗号表示 AND,感叹号表示 NOT;使用 go build 的子命令 -tags 指定预定义的 build 指令,多个自定义指令用空格分隔。

       

  • run
    go run 实际上将 go build 编译并生成可执行程序,然后执行可执行程序,两个步骤合为一个步骤。从而可以节省一些开发时间。
  • vet
    vet 命令可以帮助开发人员检测代码的常见错误,可以节省开发时间。vet 可以检测的错误分别是,Printf 类函数调用时,类型匹配错误的参数;定义常用的方法时,方法签名的错误;错误的结构标签;没有指定字段名的结构字面量。
  • clean
    clean 命令可以删除编译生成的可执行文件。通常用于将源码发布到代码库时,防止可执行文件也发布到代码库。


04

安装 install


install 和 build 类似,区别在于 install 会保存每一个包的编译代码和命令,会将编译结果保存到 pkg 和 bin 目录。还有一个重要的区别是 install 支持增量编译,对于没有改变的包和命令会直接链接 pkg 目录中的静态包,不会重新编译,加快编译速度。


05

格式化 fmt


fmt 命令可以帮助开发人员自动格式化指定的源码文件并保存,建议养成在保存文件或提交到代码库之前执行 go fmt 命令的习惯。


06

测试 test


go test 命令在「Go 语言学习之测试」章节介绍过,这里不再赘述。


07

包的查询 list


list 命令行工具可以获取包的信息,go list 包导入路径,可以判断包是否存在于工作空间中,如果存在则输出它的导入路径;go list ... ,可以查询工作空间中的所有包;go list dir/...,可以查询指定目录中的所有包;go list ...xml...,可以模糊查询出相关的所有包;以上方式仅是获取包的导入路径,go list 还可以使用子命令 -json 获取包的完整元数据,使用子命令 -f 指定输出格式。


08

包的文档化


  • doc
    go doc 命令行工具可以输出文档注释,参数可以是包名,包成员,方法名。
  • godoc
    godoc 命令行工具可以提供一个 HTML 页面来浏览文档注释。




目录
相关文章
|
21天前
|
存储 Go 索引
go语言中数组和切片
go语言中数组和切片
34 7
|
21天前
|
Go 开发工具
百炼-千问模型通过openai接口构建assistant 等 go语言
由于阿里百炼平台通义千问大模型没有完善的go语言兼容openapi示例,并且官方答复assistant是不兼容openapi sdk的。 实际使用中发现是能够支持的,所以自己写了一个demo test示例,给大家做一个参考。
|
21天前
|
程序员 Go
go语言中结构体(Struct)
go语言中结构体(Struct)
94 71
|
20天前
|
存储 Go 索引
go语言中的数组(Array)
go语言中的数组(Array)
101 67
|
23天前
|
Go 索引
go语言for遍历数组或切片
go语言for遍历数组或切片
93 62
|
1天前
|
存储 监控 算法
员工上网行为监控中的Go语言算法:布隆过滤器的应用
在信息化高速发展的时代,企业上网行为监管至关重要。布隆过滤器作为一种高效、节省空间的概率性数据结构,适用于大规模URL查询与匹配,是实现精准上网行为管理的理想选择。本文探讨了布隆过滤器的原理及其优缺点,并展示了如何使用Go语言实现该算法,以提升企业网络管理效率和安全性。尽管存在误报等局限性,但合理配置下,布隆过滤器为企业提供了经济有效的解决方案。
26 8
员工上网行为监控中的Go语言算法:布隆过滤器的应用
|
25天前
|
并行计算 安全 Go
Go语言中的并发编程:掌握goroutines和channels####
本文深入探讨了Go语言中并发编程的核心概念——goroutine和channel。不同于传统的线程模型,Go通过轻量级的goroutine和通信机制channel,实现了高效的并发处理。我们将从基础概念开始,逐步深入到实际应用案例,揭示如何在Go语言中优雅地实现并发控制和数据同步。 ####
|
21天前
|
存储 Go
go语言中映射
go语言中映射
33 11
|
23天前
|
Go
go语言for遍历映射(map)
go语言for遍历映射(map)
32 12
|
22天前
|
Go 索引
go语言使用索引遍历
go语言使用索引遍历
29 9