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 页面来浏览文档注释。




目录
相关文章
|
3天前
|
存储 JSON 监控
Viper,一个Go语言配置管理神器!
Viper 是一个功能强大的 Go 语言配置管理库,支持从多种来源读取配置,包括文件、环境变量、远程配置中心等。本文详细介绍了 Viper 的核心特性和使用方法,包括从本地 YAML 文件和 Consul 远程配置中心读取配置的示例。Viper 的多来源配置、动态配置和轻松集成特性使其成为管理复杂应用配置的理想选择。
16 2
|
7天前
|
JavaScript Java Go
探索Go语言在微服务架构中的优势
在微服务架构的浪潮中,Go语言以其简洁、高效和并发处理能力脱颖而出。本文将深入探讨Go语言在构建微服务时的性能优势,包括其在内存管理、网络编程、并发模型以及工具链支持方面的特点。通过对比其他流行语言,我们将揭示Go语言如何成为微服务架构中的一股清流。
|
6天前
|
Ubuntu 编译器 Linux
go语言中SQLite3驱动安装
【11月更文挑战第2天】
28 7
|
6天前
|
关系型数据库 Go 网络安全
go语言中PostgreSQL驱动安装
【11月更文挑战第2天】
28 5
|
6天前
|
安全 Go
用 Zap 轻松搞定 Go 语言中的结构化日志
在现代应用程序开发中,日志记录至关重要。Go 语言中有许多日志库,而 Zap 因其高性能和灵活性脱颖而出。本文详细介绍如何在 Go 项目中使用 Zap 进行结构化日志记录,并展示如何定制日志输出,满足生产环境需求。通过基础示例、SugaredLogger 的便捷使用以及自定义日志配置,帮助你在实际开发中高效管理日志。
19 1
|
5天前
|
程序员 Go
go语言中的控制结构
【11月更文挑战第3天】
81 58
|
4天前
|
监控 Go API
Go语言在微服务架构中的应用实践
在微服务架构的浪潮中,Go语言以其简洁、高效和并发处理能力脱颖而出,成为构建微服务的理想选择。本文将探讨Go语言在微服务架构中的应用实践,包括Go语言的特性如何适应微服务架构的需求,以及在实际开发中如何利用Go语言的特性来提高服务的性能和可维护性。我们将通过一个具体的案例分析,展示Go语言在微服务开发中的优势,并讨论在实际应用中可能遇到的挑战和解决方案。
|
6天前
|
存储 编译器 Go
go语言中的变量、常量、数据类型
【11月更文挑战第3天】
21 9
|
1天前
|
Go
go语言中的 跳转语句
【11月更文挑战第4天】
9 4
|
5天前
|
数据采集 监控 Java
go语言编程学习
【11月更文挑战第3天】
21 7