)
文档教程【免费下载链接】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.2 章es/01.2.md为骨架系统讲解 Go 语言经典工作区模型$GOPATH的配置方法、src/pkg/bin三目录结构、自定义包的创建与编译go install、以及用go get安装远程包的完整流程。读完本文你将能独立搭建一个规范的 Go 工作区创建并编译自己的可复用包理解包路径与导入路径之间的对应关系并在本仓库的配套代码中直接验证每一步结果。一、$GOPATHGo 所有命令赖以工作的环境变量1.1 GOPATH 与 GOROOT 的区别Go 的所有命令都依赖一个重要的环境变量$GOPATH。需要特别注意它并不是$GOROOT——$GOROOT表明 Go 工具链安装在哪里而$GOPATH指向的是你计算机上的 Go 工作区workspace即存放本机全部 Go 代码的目录。原文以/home/apple/mygo作为作者机器上的示例路径如果你没有相同的目录结构请替换为你自己的路径。1.2 不同操作系统下的设置方式Unix 系系统在 shell 中导出变量建议追加写入~/.profile以便每次登录自动生效export GOPATH/home/apple/mygoWindows 系统需要新建一个名为GOPATH的环境变量然后把它的值设为c:\mygo该值取决于你的工作区实际位置。在 Windows 下引用环境变量的写法是%GOPATH%。补充一点来自仓库英文版同章节en/01.2.md的事实从 Go 1.8 开始如果未显式设置GOPATH会有一个默认值——Unix 下默认为$HOME/goWindows 下默认为%USERPROFILE%/go。这大大降低了新手的上手门槛但显式设置仍然是管理多项目、多工作区时的推荐做法。1.3 多工作区路径与go get的行为$GOPATH中配置多条工作区路径是允许的但必须用:分隔Windows 用;。此时需要注意一个关键行为go get会把内容保存到$GOPATH的第一条路径。仓库英文版还特别强调了遵循目录规范的重要性——不要在$GOPATH内直接以自己的项目名建目录否则包会以裸名packagename被引用导致所有通过go get导入该包的应用程序找不到它破坏 Go 语言希望借由路径规范带来的包管理便利。约定之所以存在是因为它有存在的理由。1.4 工作区必须包含的三个目录在$GOPATH下必须准备以下三个目录各司其职目录存放内容说明src源码文件后缀为.go、.c、.g、.s的源文件pkg编译产物后缀为.a的归档编译好的包二进制bin可执行文件go install生成的可执行程序本书中作者统一使用mygo作为$GOPATH中的唯一路径。二、包目录创建你的第一个包 mymath2.1 目录名与包名的约定创建包的源码文件与目录规范形态如$GOPATH/src/mymath/sqrt.gomymath就是包名。作者用mymath作为包名同时也用这个名字作为存放该包源码文件的目录名。每创建一个包就应在src目录下新建一个文件夹文件夹名称通常与将要使用的包名一致仓库英文版补充main包是例外不必强制建main目录。目录支持多级嵌套例如创建目录$GOPATH/src/github.com/astaxie/beedb那么包路径即导入路径就是github.com/astaxie/beedb而包名取路径的最后一级目录名即beedb。2.2 动手创建 mymath 包按下面的命令逐步执行cd $GOPATH/src mkdir mymath然后在mymath目录下新建文件sqrt.go写入以下内容// Código fuente de $GOPATH/src/mymath/sqrt.go package mymath func Sqrt(x float64) float64 { z : 0.0 for i : 0; i 1000; i { z - (z*z - x) / (2 * x) } return z }这段代码用牛顿迭代法切线逼近法实现平方根计算从一个初始猜测z 0.0出发反复用公式z - (z*z - x) / (2 * x)逼近真实平方根迭代 1000 次后返回结果。需要注意这里迭代公式中的(2 * x)在x为 0 时会触发除零结果为 NaN因此该实现主要用于教学演示实用场景建议直接使用标准库math.Sqrt。2.3 仓库源码印证本仓库把书中的mymath包原样收录在 es/code/src/mymath/sqrt.go其Sqrt函数与书中代码逐行一致注释也说明该包必须被其他 Go 文件 import 后才能运行。这正是第 1.2 章所述目录包含该包全部源码约定的直接体现。三、编译包go install 与 .a 归档文件包创建好之后如何把它编译成可供其他程序链接的产物有两种方式把当前工作路径切换到包目录然后执行go install不切换目录直接在命令中给出包名作为参数go install mymath。编译完成后可以打开下面这个目录查看产物cd $GOPATH/pkg/${GOOS}_${GOARCH} // 你可以看到生成的文件 mymath.a这里的${GOOS}_${GOARCH}是 Go 按目标操作系统与 CPU 架构生成的子目录名例如darwin_amd64macOS/64 位 x86、linux_amd64Linux/64 位 x86、windows_amd64等。后缀为.a的文件就是包的二进制归档——它包含了包编译后的全部导出符号供其他程序在编译链接时使用。关于go install与go build的分工仓库下一章 es/01.3.md 给出了更精确的说明可概括为go build主要用于编译验证如果编译的是非main包如mymath不会生成任何文件只有main包才会在同目录产出可执行文件go install会编译所有包并生成产物然后移动到$GOPATH/pkg或$GOPATH/bin——这正是本章选择go install的原因只有它会把.a归档放进pkg目录。四、使用包创建可执行应用 mathapp有了.a归档还不够我们必须创建一个新的应用程序来使用它。下面创建一个名为mathapp的应用cd $GOPATH/src mkdir mathapp cd mathapp vim main.go在main.go中写入以下代码//$GOPATH/src/mathapp/main.go código fuente package main import ( mymath fmt ) func main() { fmt.Printf(Hello, world. Sqrt(2) %v\n, mymath.Sqrt(2)) }main包通过import mymath引入上一节编译好的包并在main函数中调用mymath.Sqrt(2)输出结果。编译并运行cd $GOPATH/src/mathapp go install ./mathapp此时应看到$GOPATH/bin/下生成了名为mathapp的可执行文件终端输出Hello world. Sqrt(2) 1.414213562373095Sqrt(2)的输出与math.Sqrt(2)的真值1.4142135623730951在浮点精度范围内一致说明包的编译、链接、调用全链路已经打通。仓库内直接验证本书配套代码把这一示例收录在 es/code/src/apps/ch.1.2/main.go它同样import mymath并打印Sqrt(2)的结果文件头注释给出了验证方法——进入该目录执行go run main.go如果屏幕上没有出现 Hello World就说明工作区没有配置好。配套的 en/code/readme.md 还建议把GOPATH环境变量指向该 code 目录本身该目录下直接包含src/这样仓库内的mymath包路径就能被正确解析你可以在不改动任何代码的前提下完整复现本章的编译与运行流程。五、安装远程包go getGo 提供了一条安装远程包的命令go get它支持绝大多数开源代码托管社区包括 GitHub、Google Code、BitBucket 和 Launchpad。例如安装本书作者 astaxie 的 beedb 数据库 ORM 包go get github.com/astaxie/beedb使用go get -u ...可以更新远程包并且会自动安装它依赖的所有包。5.1 前置条件版本控制工具go get会根据不同的代码托管平台调用不同的版本控制工具例如 GitHub 用git、Google Code 用hgMercurial。因此在使用go get之前必须先把对应平台的版本控制工具安装好并配置到$PATH。各平台与工具的对应关系可参考仓库 es/01.3.md 中的说明BitBucket → Mercurial/GitGitHub → GitGoogle Code → Git/Mercurial/SubversionLaunchpad → Bazaar。5.2 go get 的工作流程与目录结构执行完上面的go get命令后$GOPATH下的目录结构应变为$GOPATH src |-github.com |-astaxie |-beedb pkg |--${GOOS}_${GOARCH} |-github.com |-astaxie |-beedb.a实际上go get做两件事先把远程源码克隆到本地$GOPATH/src按托管域名/用户名/仓库名组织路径然后自动执行go install把编译好的归档放进$GOPATH/pkg/${GOOS}_${GOARCH}。5.3 使用远程包远程包的使用方式与本地包完全一致直接在代码中按完整包路径导入即可import github.com/astaxie/beedb这与前文$GOPATH/src/github.com/astaxie/beedb的目录结构一一对应——Go 的导入路径就是相对src的目录路径这也是为什么规范的组织方式如此重要。六、完整目录结构总览如果你完整跟随了上述所有步骤工作区最终的结构如下bin/ mathapp pkg/ ${GOOS}_${GOARCH}, como darwin_amd64, linux_amd64 mymath.a github.com/ astaxie/ beedb.a src/ mathapp main.go mymath/ sqrt.go github.com/ astaxie/ beedb/ beedb.go util.go现在目录结构一目了然bin存放可执行文件这里是mathapppkg存放编译后的包归档本地包mymath.a与远程包beedb.a均按${GOOS}_${GOARCH}平台子目录组织src存放全部包源码本地包mymath、应用mathapp、远程克隆的beedb。这套GOPATH工作区模型是 Go 语言在引入 Modules 之前本书写作于 Go 1.01.5 时代安装示例可见 es/01.1.md官方推荐的标准开发组织方式理解它对阅读老项目、参与开源协作仍有直接价值。七、Windows 用户注意事项Windows 下环境变量的引用格式是%GOPATH%例如cd %GOPATH%\src路径分隔符使用;而本书整体以 Unix 风格为主因此 Windows 用户需要自行做相应替换。如果使用 Windows 安装包安装 Go安装程序会自动配置好PATH等基础变量但GOPATH仍需要像 1.2 节所述那样手动新建。八、相关章节导航章节总目录es/preface.md上一节Go 环境安装es/01.1.md下一节Go 命令行工具详解含go build、go clean、go fmt、go test、go doc等es/01.3.md赞分享文档教程【免费下载链接】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.2$GOPATH 与 Workspace 工作区的完整实战指南Build Web Application with Golang 精读1.2$GOPATH 与 Workspace 工作区的完整实战指南 本文是《Bui文档教程Baserow Helm Chart 实战指南Kubernetes 全栈部署、域名路由、按需 TLS 与云厂商适配Baserow Helm Chart 实战指南Kubernetes 全栈部署、域名路由、按需 TLS 与云厂商适配 Baserow 是基于 Django 与文档教程构建 Go 开发环境从安装、GOPATH 工作区到命令行工具与编辑器Build Web Application with Golang 第 1 章构建 Go 开发环境从安装、GOPATH 工作区到命令行工具与编辑器Build Web Application with Golang 第 1 章 本文基文档教程上一篇免费开源AMD Ryzen处理器终极调试工具SMUDebugTool完全指南下一篇基于 Rube MCP 的 Conversion Tools 自动化实战Composio 技能的工作流设计与最佳实践创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考