90DaysOfDevOps 第 10 天:Go Workspace 与代码编译运行实战
文档/教程【免费下载链接】90DaysOfDevOpsThis repository started out as a learning in public project for myself and has now become a structured learning map for many in the community. We have 3 years under our belt covering all things DevOps, including Principles, Processes, Tooling and Use Cases surrounding this vast topic.项目地址https://gitcode.com/gh_mirrors/90/90DaysOfDevOps点击查看免费下载本文围绕 #90DaysOfDevOps 学习路线中 2022/es/Days/day10.md 的内容展开深入讲解 Go 工作区GOPATH/src/pkg/bin的目录结构与配置方法以及go build、go install、go run三种编译运行方式的差异与实战用法。读完本文你将能独立配置 Go 开发环境、正确组织项目目录并理解编译、链接、缓存与交叉编译背后的原理为后续编写真实 Go 程序如仓库中 2022/Days/Go 下的示例代码打下基础。Go Workspace从默认 GOPATH 到自定义工作区第 10 天的核心内容是补全第 8 天遗留的问题Go 工作区到底是什么第 8 天我们选择了安装默认值并在系统已经定义好的 GOPATH 里创建了 Go 文件夹。但实际上GOPATH 完全可以改到任何你希望的位置。执行下面的命令查看当前 GOPATH 指向哪里echo $GOPATH在作者的环境macOS 上输出类似如下用户名可能不同/Users/michael/projects/go在 Linux 上必须自己配置 GOPATH。作者使用的是 zsh配置写入$HOME/.zshrc如果你用 bash则写入$HOME/.bashrc。只需在文件末尾追加两行export GOPATH$HOME/work export PATH$PATH:/usr/local/go/bin:$GOPATH/bin重新加载 shell 配置后再验证exec zsh echo $GOPATH更多信息可参考 Go 官方安装文档go.dev/doc/install。这组环境变量是理解整个 Go 工具链的钥匙GOPATH定义工作区根目录PATH中追加/usr/local/go/bin与$GOPATH/bin则是为了让go命令本身以及后续go install产出的二进制可执行文件都能在任意终端中被直接调用。工作区的三大目录src、pkg 与 bin在 GOPATH 下Go 采用固定的三层目录布局。作者在第 8 天创建了这三个目录src所有源码与项目所在src存放你的全部 Go 程序与项目。它的核心作用是按命名空间管理包namespacing package managementGo 通过src下的路径来组织所有仓库与包的导入关系。在作者的工作站上src下就有用于 Hello #90DaysOfDevOps 项目的Hello文件夹。这一设计直接呼应了第 9 天讲的“包”概念一个包是同一目录下的一组.go文件而src目录的层次结构就是这个包命名空间在磁盘上的映射。pkg已编译的归档包与编译加速pkg存放程序安装过或正在使用的包归档文件。它的存在意义在于加速编译Go 会根据被引用的包是否被修改过来复用这些归档文件避免重复编译。这也是为什么第 8 天安装 VSCode Go 扩展时之前还是空的pkg目录里会多出许多新包——那正是扩展与工具链拉取并归档的标准库/第三方包。关于这种目录布局为什么这样设计、以及 src/pkg/bin 之外还有哪些目录例如更现代的 module cache作者建议阅读 GoChronicles 的 Project Structure 一文它比当前笔记讲得更深。bin编译产物的二进制存放处bin是所有已编译二进制文件的存放目录。第 10 天稍后会看到go install产出的可执行文件正是被放到这里。由于前面已经把$GOPATH/bin加入了PATH这些二进制可以在终端直接以命令名方式运行。复杂项目示例结构的意义我们的 Hello #90DaysOfDevOps 只是一个极简程序不足以体现 src/pkg/bin 布局的价值。下面这张图来自 GoChronicles展示了一个更复杂的 Go 程序目录结构可以看到 src 下的层级、包组织以及各类子目录如何各司其职从仓库自身也可以找到印证在 2022/Days/Go 目录下除了 hello.go 之外还按天存放了day11_example1.go到day13_example3.go等一批示例源文件并带有一个 makefile。这个 makefile 恰好演示了“复杂一点”的 Go 项目如何使用构建脚本统一产出多平台二进制我们稍后会在交叉编译一节详细展开。Go 工具链安装 Go 后你得到了什么在进入编译环节之前先看看 Go 安装包到底带来了什么。第 8 天安装 Go 时实际安装的是一系列 Go 工具Go tools——它们是若干可以构建和处理 Go 源文件的程序其中就包括go这个主命令。值得强调的是标准安装之外还可以安装额外的工具具体取决于你开发的项目类型。在终端里直接输入go你会看到类似下图的全命令列表以及底部暂时不需要关注的 Additional Help Topics附加帮助主题仓库中的西班牙语翻译笔记 2022/es/Days/Go/Ayuda_go_traducida.md 完整收录了这段帮助文本列出bug、build、clean、doc、env、fix、fmt、generate、get、install、list、mod、work、run、test、tool、version、vet等命令以及buildconstraint、buildmode、cache、environment、gopath、modules等附加帮助主题。其中gopath与environment两个主题直接关联本节的 GOPATH 配置modules则对应现代 Go 的 module 模式——这是理解第 10 天内容的上层背景。在第 8 天我们其实已经用过其中的至少两个命令了本天要重点学习的命令是build、install和run三种编译运行方式go run / go build / go install要运行代码首先要编译它。Go 提供了三种方式它们的差异集中在“编译到哪里”和“是否执行”上go run编译并运行命令行中指定的.go文件所组成的 main 包。编译结果被写入一个临时文件夹运行完即弃不保留产物。适合开发阶段的快速验证。go build编译当前目录下的包及其依赖。如果项目中包含main包它会在当前目录生成可执行文件否则产物会被放进pkg文件夹供其他 Go 程序导入使用。go build还支持为任意 Go 支持的 OS 平台构建可执行文件即交叉编译。go install行为与go build相同但把可执行文件放进bin文件夹也就是$GOPATH/bin。第 8 天我们已经跑过go build main.go与go run main.go这里可以再完整走一遍。以仓库中的 hello.go内容是fmt.Println(Until tomorrow #90DaysOfDevOps)为例cd 2022/Days/Go # 1. go run编译并直接运行产物在临时目录 go run hello.go # 输出Until tomorrow #90DaysOfDevOps # 2. go build在当前目录生成可执行文件 go build hello.go ./hello # 输出Until tomorrow #90DaysOfDevOps # 3. go install把可执行文件安装到 $GOPATH/bin go install # 之后可在任意位置直接执行hello执行go install后产物会出现在$GOPATH/bin这也是第 10 天开篇要求把$GOPATH/bin加入PATH的原因所在。深入一点go build 的交叉编译能力原文特别指出go build能“为任何 Go 支持的 OS 平台构建可执行文件”仓库里的 makefile 就是这一能力的实战模板。它以BINARY_NAME90DaysOfDevOps为基准用GOOS/GOARCH环境变量一次构建 macOS、Linux、Windows 以及 arm64 架构的多个版本BINARY_NAME90DaysOfDevOps build: GOARCHamd64 GOOSdarwin go build -o ${BINARY_NAME}_0.2_darwin main.go GOARCHamd64 GOOSlinux go build -o ${BINARY_NAME}_0.2_linux main.go GOARCHamd64 GOOSwindows go build -o ${BINARY_NAME}_0.2_windows main.go GOARCHarm64 GOOSlinux go build -o ${BINARY_NAME}_0.2_linux_arm64 main.go GOARCHarm64 GOOSdarwin go build -o ${BINARY_NAME}_0.2_darwin_arm64 main.go这段配置印证了原文关于go build的两个要点其一产物默认落在当前目录这里用-o显式指定了文件名其二通过GOOS目标操作系统与GOARCH目标 CPU 架构的组合可以在单台机器上产出跨平台可执行文件。makefile 还提供了run直接运行二进制、build_and_run、clean等目标展示了真实项目如何把编译流程自动化。回到源码hello.go 的编译入口结合第 9 天逐行拆解的内容2022/Days/Go/hello.go 的package main声明正是go build决定“是否生成可执行文件”的判断依据只有main包会被编译成可执行程序并放进当前目录非main包则归档进pkg供导入。这也是为什么三种命令行为差异与包类型强相关。本节小结GOPATH 不是固定不变的Linux 下需要在~/.bashrc或~/.zshrc中通过export GOPATH...与export PATH...自行配置工作区按src源码与包命名空间、pkg包归档、编译加速、bin编译产物三层组织go run临时编译并运行go build在当前目录产出可执行文件支持跨平台构建go install把产物安装到$GOPATH/binGo 安装自带一整套工具链go命令的完整列表与附加帮助主题可参考仓库笔记 2022/es/Days/Go/Ayuda_go_traducida.md。在进入下一节第 11 天的变量、常量与数据类型之前建议先把 hello.go 的三种编译方式各跑一遍再尝试用 makefile 体验一次多平台交叉构建这样你对 Go 工作区与编译链路的理解会更加扎实。赞分享文档/教程【免费下载链接】90DaysOfDevOpsThis repository started out as a learning in public project for myself and has now become a structured learning map for many in the community. We have 3 years under our belt covering all things DevOps, including Principles, Processes, Tooling and Use Cases surrounding this vast topic.项目地址https://gitcode.com/gh_mirrors/90/90DaysOfDevOps点击查看免费下载相关推荐90DaysOfDevOps深入理解 Go Workspace 与 go build / go install / go run 编译运行机制90DaysOfDevOps深入理解 Go Workspace 与 go build / go install / go run 编译运行机制 本篇指南源自文档/教程90DaysOfDevOps 第 17 天Linux 文本编辑器 nano 与 vim 实战指南90DaysOfDevOps 第 17 天Linux 文本编辑器 nano 与 vim 实战指南 导读 在 90DaysOfDevOps 的学习路线中第 1文档/教程90DaysOfDevOps 系列之 Go 语言入门逐行拆解 Hello World 代码编译、包与 main 函数90DaysOfDevOps 系列之 Go 语言入门逐行拆解 Hello World 代码编译、包与 main 函数 本篇是 90DaysOfDevOps文档/教程上一篇5分钟免费扩展Windows桌面虚拟显示器完整指南下一篇终极AMD处理器调试指南5个技巧掌握硬件性能优化创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考

相关新闻

STM32CubeMX 6.14图形化配置指南:从时钟树到代码生成

STM32CubeMX 6.14图形化配置指南:从时钟树到代码生成

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/10/1 2:26:57 阅读更多 →
C#实现SECS/GEM通信:从HSMS到状态机全解析

C#实现SECS/GEM通信:从HSMS到状态机全解析

几年前我第一次把一台C#写的上位机接到半导体前道设备的SECS/GEM端口时,心里其实没底。对方是日本厂商的薄膜设备,EAP系统要求必须通过SECS/GEM联机才能跑Recipe,而我手里只有几百页英文SEMI规范PDF,和一台连IP都没配好的旧PC。后…

2026/10/1 2:25:56 阅读更多 →
PhotoPrism 后端代码地图(CODEMAP):从入口到源码的快速导航指南

PhotoPrism 后端代码地图(CODEMAP):从入口到源码的快速导航指南

后端前端图像处理人工智能AI 应用 【免费下载链接】photoprism AI-Powered Photos App 🌈💎✨ 项目地址: https://gitcode.com/gh_mirrors/ph/photoprism 点击查看 免费下载 PhotoPrism 是一个基于 Go 与 Vue 构建的 AI 照片管理应用&#x…

2026/10/1 2:25:56 阅读更多 →

最新新闻

鱼数据集VOC与YOLO格式解读及YOLOv8训练实践

鱼数据集VOC与YOLO格式解读及YOLOv8训练实践

简介:面向目标检测与鱼类识别任务,该数据集包含31个鱼种、共2798张图像的多类别标注,适合算法学习者、渔业智能化项目开发者以及需要现成训练数据的入门者使用。压缩包约109.1MB,共2000个文件,主体为1999个XML标注文件…

2026/10/1 3:07:21 阅读更多 →
共享自习室系统:高并发资源调度实战指南

共享自习室系统:高并发资源调度实战指南

简介:本资源是一套完整的基于Java开发的共享自习室系统毕业设计项目,面向计算机专业本科生及Java Web初学者,聚焦高校或社区场景下的学习空间数字化管理需求,帮助用户掌握Spring Boot、Vue前后端分离开发、MySQL数据库设计及预约业…

2026/10/1 3:07:21 阅读更多 →
C#上位机通过OPC连接PLC读写数据:实例源码与常见故障排查

C#上位机通过OPC连接PLC读写数据:实例源码与常见故障排查

简介:通过OPC协议连接PLC实现数据读写的C#程序源码,面向工控行业新手与有一定经验的开发人员,解决上位机与可编程控制器之间数据交换的常见需求。资源共30个文件,压缩包仅1.19MB,主要包含C#源文件、DLL依赖库、解决方案…

2026/10/1 3:07:21 阅读更多 →
Unitary-MUSIC:面向圆阵/螺旋阵的DOA估计算法

Unitary-MUSIC:面向圆阵/螺旋阵的DOA估计算法

简介:本资源是一份面向信号处理方向研究生与工程师的Unitary-MUSIC算法实践代码包,聚焦于旋转不变性场景下的DOA(波达方向)高精度估计问题,适用于雷达、无线通信及阵列信号处理等实际应用。压缩包含2个MATLAB源文件&am…

2026/10/1 3:07:21 阅读更多 →
基于YOLOv5的果蔬识别系统实战:数据集构建、训练调优与树莓派部署

基于YOLOv5的果蔬识别系统实战:数据集构建、训练调优与树莓派部署

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/10/1 3:07:21 阅读更多 →
YOLOv8游戏自动化测试实战:从目标检测到异常监控

YOLOv8游戏自动化测试实战:从目标检测到异常监控

简介:在游戏画面识别场景中,传统模板匹配与像素颜色判定常因动态背景、UI叠层和技能特效而失效。目标检测作为计算机视觉的核心技术,通过回归边界框与类别概率,能够将复杂画面转化为结构化数据,为自动化测试提供稳定的…

2026/10/1 3:06:20 阅读更多 →

日新闻

我发现了一个新思路:用 Remotion + Claude Code 像写代码一样自动化生成短视频

我发现了一个新思路:用 Remotion + Claude Code 像写代码一样自动化生成短视频

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/10/1 0:00:30 阅读更多 →
Windows下 Codex 中 Chrome 和 Computer Use 插件不可用问题排查及解决参考方式:TaoToken 统一 Key 配置与验证

Windows下 Codex 中 Chrome 和 Computer Use 插件不可用问题排查及解决参考方式:TaoToken 统一 Key 配置与验证

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/10/1 0:00:30 阅读更多 →
黑夜航拍船只数据集训练YOLOV5模型全流程解析

黑夜航拍船只数据集训练YOLOV5模型全流程解析

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/10/1 1:01:17 阅读更多 →

周新闻

如何划分训练/验证集:Spirula Studio五种eval_mode策略详解

如何划分训练/验证集:Spirula Studio五种eval_mode策略详解

如何划分训练/验证集:Spirula Studio五种eval_mode策略详解 【免费下载链接】spirula-studio Cross-vendor 3D Gaussian Splatting trainer - video to splat to mesh, Vulkan or CUDA. 项目地址: https://gitcode.com/GitHub_Trending/sp/spirula-studio Sp…

2026/9/30 13:14:22 阅读更多 →
SEO怎么推广速查手册新手避坑实战指南

SEO怎么推广速查手册新手避坑实战指南

SEO怎么推广速查手册新手避坑实战指南 模板网站太丑不够用?别急着加滤镜,那是治标不治本。很多老板盯着后台流量掉得眼红,却还在纠结首页Banner的圆角是不是3像素。这就像穿着西装去挖土,姿势不对,努力白费。我整理这份 速查手册…

2026/9/30 18:13:06 阅读更多 →
FireRed-OpenStoryline少样本仿写深度解析:AI Agent如何复刻你的独特文案风格与节奏

FireRed-OpenStoryline少样本仿写深度解析:AI Agent如何复刻你的独特文案风格与节奏

FireRed-OpenStoryline少样本仿写深度解析:AI Agent如何复刻你的独特文案风格与节奏 【免费下载链接】FireRed-OpenStoryline FireRed-OpenStoryline is an AI video editing agent that transforms manual editing into intention-driven directing through natural language …

2026/9/30 13:14:49 阅读更多 →

月新闻

我发现了一个新思路:用 Remotion + Claude Code 像写代码一样自动化生成短视频

我发现了一个新思路:用 Remotion + Claude Code 像写代码一样自动化生成短视频

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/10/1 0:00:30 阅读更多 →
Windows下 Codex 中 Chrome 和 Computer Use 插件不可用问题排查及解决参考方式:TaoToken 统一 Key 配置与验证

Windows下 Codex 中 Chrome 和 Computer Use 插件不可用问题排查及解决参考方式:TaoToken 统一 Key 配置与验证

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/10/1 0:00:30 阅读更多 →
黑夜航拍船只数据集训练YOLOV5模型全流程解析

黑夜航拍船只数据集训练YOLOV5模型全流程解析

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/10/1 1:01:17 阅读更多 →