
文档教程【免费下载链接】build-web-application-with-golangA golang ebook intro how to build a web with golang项目地址https://gitcode.com/gh_mirrors/bu/build-web-application-with-golang点击查看免费下载本文围绕开源电子书《Build Web Application with Golang》第 1.3 节对应仓库pt-br/01.3.md展开系统讲解 Go 语言自带的一套命令行工具go build、go clean、go fmt/gofmt、go get、go install、go test、godoc等。读完本文你将掌握每条命令的用途、典型使用场景与关键参数并结合仓库中的mymath包与mathapp应用示例理解编译、安装、依赖管理与文档检索的完整工作流。Go 命令概览一行go看遍全部工具Go 语言原生内置了一套完整的命令行操作工具。在终端中直接执行go即可查看完整的子命令列表这也是验证 Go 环境是否安装成功的最快方式图 1.3go命令显示各子命令的详细说明图片来源pt-br/images/1.3.go.png输出中会列出build编译包与依赖、clean移除目标文件、fmt对包源码执行 gofmt 格式化、get下载并安装包与依赖、install编译并安装包与依赖、run编译并运行 Go 程序、test测试包等核心子命令以及若干辅助帮助主题。每个命令都配有简短说明如需更详细的用法随时可以使用go help command查看完整帮助信息。这些命令覆盖了日常开发中最关键的环节。下面逐一深入讲解。go build编译代码的核心命令go build用于编译代码。在包的编译过程中若有必要它会同时编译与之相关联的依赖包。理解它的行为关键在于区分两种包类型普通包非main包以本书第 1.2 节创建的mymath包为例源码见 pt-br/code/src/mymath/sqrt.go执行go build之后不会产生任何文件。如果你需要在$GOPATH/pkg下生成对应的.a归档文件应当改用go install。main包可执行程序以第 1.2 节的mathapp应用为例源码见 pt-br/code/src/apps/ch.1.2/main.go执行go build后会在当前目录生成一个可执行文件。如果你希望可执行文件出现在$GOPATH/bin下则需要使用go install或者用go build -o {目录路径}/{文件名}手动指定输出位置在 UNIX/Linux 系统上.exe后缀并非必需该写法同样可用于把可执行文件定向输出到其他目录。go build还有几个值得注意的行为规则指定单个文件如果某个项目文件夹下有多个 Go 源文件而你只想编译其中某一个可以在go build后追加文件名例如go build a.go直接使用go build则会编译当前目录下的所有 Go 文件。指定输出文件名例如对mathapp项目执行go build -o astaxie.exe将生成astaxie.exe而不是默认名称。默认情况下非main包以包名即文件夹名为输出名main包则以第一个源文件名为输出名。包名与文件夹名可以不同根据 Go 语言规范包名由源文件第一行package关键字后的单词决定不必与所在文件夹同名但可执行文件的默认名称取的是文件夹名。忽略特殊文件go build会忽略文件名以_或.开头的 Go 文件。按操作系统选择源文件如果你的源码需要针对不同操作系统做差异化处理可以按操作系统后缀来命名文件例如array_linux.go | array_darwin.go | array_windows.go | array_freebsd.gogo build会自动选择与当前操作系统匹配的文件进行编译。例如在 Linux 系统下只编译array_linux.go其余系统后缀文件全部忽略。这一机制正是 Go 构建约束build constraints的早期形态为跨平台开发提供了基础支持。此外本书中文版章节zh/01.3.md还记录了该写作时期go build的常用参数可作为进阶参考参数作用-o指定输出文件名可带路径例如go build -o a/b/c-i安装相应的包等价于编译 go install-a强制更新所有已是最新的包对标准包不适用-n打印需要执行的编译命令但不执行便于了解底层流程-p n指定并行编译的数目默认是 CPU 数目-race编译时自动检测数据竞争仅支持 64 位机器-v打印正在编译的包名-work打印编译时的临时文件夹名称存在则不删除-x打印并执行底层命令与-n类似但会真正执行go clean清理编译产物go clean用于清理当前源码包及其关联包在编译过程中生成的文件包括_obj/ // 旧的 object 目录由 Makefiles 遗留 _test/ // 旧的 test 目录由 Makefiles 遗留 _testmain.go // 旧的 gotest 文件由 Makefiles 遗留 test.out // 旧的 test 记录由 Makefiles 遗留 build.out // 旧的 test 记录由 Makefiles 遗留 *.[568ao] // object 文件由 Makefiles 遗留 DIR(.exe) // 由 go build 产生 DIR.test(.exe) // 由 go test -c 产生 MAINFILE(.exe) // 由 go build MAINFILE.go 产生典型应用场景是在把项目上传到版本控制仓库如 GitHub之前执行go clean清除本地测试时产生的、与具体系统相关的编译文件。这些文件对本地运行有用但对源码版本管理来说毫无必要。本书中文版章节还给出了一个带有参数的实际示例$ go clean -i -n cd /Users/astaxie/develop/gopath/src/mathapp rm -f mathapp mathapp.exe mathapp.test mathapp.test.exe app app.exe rm -f /Users/astaxie/develop/gopath/bin/mathapp其中-i会清除通过go install安装的关联包与可执行文件-n只打印将要执行的清理命令而不实际执行-r会递归清理import中引入的包-x则打印并执行详细命令。借助-n可以先预览清理范围避免误删。go fmt 与 gofmt统一代码风格有过 C/C 经验的读者都知道社区常为代码采用 KR 风格还是 ANSI 风格争论不休而在 Go 中只存在一种标准代码风格。例如左大括号必须放在行尾、不能独占一行否则会直接编译报错。好在你不必刻意记忆这些规则——go fmt会替你完成格式化工作只需执行go fmt NomeDoArquivo.gogo fmt本质上是gofmt -l -w的别名alias会针对指定的导入路径包执行格式化。现代 IDE 通常会在保存文件时自动调用它本书下一节 Ferramentas de desenvolvimento Go 介绍的开发工具均内置了该功能。需要注意的是两者的差异通常我们更推荐直接使用gofmt -w而非go fmt。因为不加-w的gofmt只会把格式化结果输出到标准输出并不会回写源文件gofmt -w src才能把整个项目src目录的代码格式写回磁盘。同理go fmt内部会带上-w因此效果是直接改写源文件。gofmt 还提供更细粒度的控制参数见 zh/01.3.md参数作用-l仅列出需要格式化的文件-w把改写后的内容直接写入文件而不是打印到标准输出-r添加形如a[b:len(a)] - a[b:]的重写规则便于批量替换-s简化文件中的代码-d显示格式化前后的 diff 而不写入文件默认 false-e打印全部语法错误到标准输出不使用该标记时只打印前 10 个错误go get远程获取代码包go get用于动态获取远程代码包。在本书写作时期它支持 BitBucket、GitHub、Google Code 和 Launchpad 等主流代码托管平台。该命令内部实际分为两步第一步下载源码包第二步执行go install完成编译安装。下载源码包时Go 工具会根据不同域名自动调用对应的版本控制工具BitBucket (Mercurial Git) GitHub (Git) Google Code (Git, Mercurial, Subversion) Launchpad (Bazaar)因此要正常使用go get必须确保已安装对应的版本管理工具并且把它们加入$PATH环境变量。此外go get还支持自定义域名详细规则可查看go help remote。在$GOPATH正确配置的前提下执行go get github.com/astaxie/beedb后仓库会形成如下的目录结构对应第 1.2 节描述的 workspace 布局$GOPATH src |-github.com |-astaxie |-beedb pkg |-${GOOS}_${GOARCH} |-github.com |-astaxie |-beedb.a也就是说源码被克隆到$GOPATH/src下编译产物落入$GOPATH/pkg下应用代码中即可通过import github.com/astaxie/beedb直接引用。本书写作时期go get的常用参数还包括-d只下载不安装、-u强制联网更新包及其依赖配合-f可跳过 import 校验适合本地 fork 的场景、-t同时下载运行测试所需的包、-fix获取源码后先执行 fix 再继续、-v显示执行的命令。go install编译并安装到 GOPATHgo install内部也分为两步第一步生成结果文件可执行文件或.a包第二步把编译好的结果移动到$GOPATH/pkg或$GOPATH/bin对应位置。回到第 1.2 节的示例来体会两者的分工在$GOPATH/src/mymath下执行go install会在$GOPATH/pkg/${GOOS}_${GOARCH}下生成mymath.a归档文件在$GOPATH/src/mathapp下执行go install会在$GOPATH/bin下生成mathapp可执行文件随后在终端执行./mathapp即可看到输出Olá, mundo. Sqrt(2) 1.414213562373095。仓库中对应的两个示例源码完整可运行mymath包定义于 pt-br/code/src/mymath/sqrt.go其中用 1000 次迭代的牛顿法近似计算平方根main包 pt-br/code/src/apps/ch.1.2/main.go 导入mymath并打印Sqrt(2)的结果。读者可以按照第 1.2 节pt-br/01.2.md的步骤搭建 workspace 后用go install亲手验证整个编译安装链路。go install支持go build的全部编译参数其中-v最常用可以随时查看底层的执行信息。go test自动化测试go test会自动读取源码目录下所有符合*_test.go命名模式的文件生成并运行测试用的可执行文件输出类似下面的信息ok archive/tar 0.011s FAIL archive/zip 0.022s ok compress/gzip 0.033s ...默认情况下不需要任何参数它会自动把当前源码包下所有测试文件测试完毕也可以携带参数做定向测试完整说明参见go help testflag。常用参数包括参数作用-bench regexp执行匹配的 benchmarks例如-bench.-cover开启测试覆盖率统计-run regexp只运行与正则匹配的测试函数例如-runArray只执行名称以 Array 开头的函数-v显示测试的详细执行命令godoc内置的强大文档工具许多人认为 Go 不需要任何第三方文档工具因为它原生内置了强大的文档工具本书作者还额外构建过 CHM 手册见原文档注释。那么如何检索每个包的文档呢查看内置builtin包的文档godoc builtin查看net/http包的文档godoc net/http查看某个包内具体函数的文档godoc fmt Printf查看函数对应的源码实现godoc -src fmt Printf更进一步你还可以启动本地文档服务器godoc -http:8080然后在浏览器中打开127.0.0.1:8080就能看到 golang.org 的本地副本页面。它不但会列出标准库包的文档还会列出$GOPATH/pkg下所有本地项目的相关文档。这一特性对网络受限环境例如无法顺畅访问境外站点的情况下的开发者尤其实用。需要注意的是本书中文版章节补充说明Go 1.2 之前还存在go doc命令之后相关功能统一迁移到godoc命令下。其他命令与帮助系统除了上述命令Go 还提供了许多其他工具见 pt-br/01.3.md 与 zh/01.3.mdgo fix // 把 go1 之前旧版本的代码更新为 go1 之后的新版本API 变化修复 go version // 显示当前 Go 版本信息 go env // 显示与 Go 相关的环境变量 go list // 列出所有已安装的包 go run // 编译临时文件并直接运行应用程序其中go run在日常开发中最为高频它把编译与运行合为一步非常适合快速验证小程序。仓库第 1.2 节的示例应用 pt-br/code/src/apps/ch.1.2/main.go 的注释里就明确说明进入源码所在目录后直接执行go run main.go若没有输出 Hello World 则说明环境配置有误——这正是go run的典型用途。中文版章节还补充了两个进阶工具go tool fix .修复旧版本代码到新版本例如处理 go1 前后的 API 变化。go tool vet directory|files静态分析当前目录代码是否正确例如fmt.Printf参数不匹配、函数提前 return 后出现无用代码等问题。go generate自 Go 1.4 引入用于在编译前按源码中的//go:generate ...特殊注释自动生成代码。例如配合yacc生成解析器时可在任意xxx.go文件中加入注释//go:generate go tool yacc -o gopher.go -p parser gopher.y之后按go generate→go build→go test的顺序执行即可。最后记住无论上述哪个命令只要想了解其完整参数与行为细节统一使用go help command例如go help testflag、go help remote、go help build即可获得权威、完整的官方帮助。结语一条命令对应一个开发环节从本节的梳理可以看到Go 的命令行工具链几乎覆盖了软件开发的全生命周期go build负责编译go clean负责收尾go fmt/gofmt统一风格go get引入依赖go install落地产物go test保障质量godoc沉淀知识。配合本书第 1.2 节pt-br/01.2.md建立的$GOPATHworkspace 结构——src存源码、pkg存编译库、bin存可执行文件——你就能搭建一条顺畅的 Go 开发流水线为后续章节构建 Web 应用打下坚实基础。相关章节导航目录上一节$GOPATH 与 Workspace下一节Go 开发工具赞分享文档教程【免费下载链接】build-web-application-with-golangA golang ebook intro how to build a web with golang项目地址https://gitcode.com/gh_mirrors/bu/build-web-application-with-golang点击查看免费下载相关推荐掌握 Go 命令行工具链go build、go test 与 godoc 实战全解《Build Web Application with Golang》1.3 节掌握 Go 命令行工具链go build、go test 与 godoc 实战全解《Build Web Application with Golang》1.文档教程Go 命令行工具速查与实战《Build Web Application with Golang》第 1.3 节 Go 命令详解Go 命令行工具速查与实战《Build Web Application with Golang》第 1.3 节 Go 命令详解 本篇技术指南以《Build W文档教程掌握Go命令行工具build-web-application-with-golang开发效率提升技巧掌握Go命令行工具build web application with golang开发效率提升技巧 你是否还在为Go项目构建流程繁琐而烦恼是否因命令参数复文档教程创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考