当前位置: 首页 > news >正文

Go学习笔记:基本概念与项目结构——GOPATH、Go Modules 与常用命令


📝本文首发于 栏轩·阁

欢迎访问阅读原文,获取更好的阅读体验。


一、Go 的项目结构

Go 的项目结构经历了两代:GOPATH 模式(旧)和Go Modules 模式(新,现在用的)。

1.1 GOPATH 模式(了解即可)

早期 Go 的所有项目都必须放在$GOPATH/src下。GOPATH默认是$HOME/go(Linux/Mac)或C:\Users\用户名\go(Windows)。

$GOPATH/ ├── src/ ← 源代码放在这里 ├── pkg/ ← 编译后的包 └── bin/ ← 编译后的可执行文件

查看当前的 GOPATH:

goenvGOPATH

1.2 Go Modules 模式(现代方式)

从 Go 1.11 开始引入,Go 1.16 起默认开启。你不再需要把项目放在 GOPATH 下,任何目录都可以是一个 Go 项目。

每个 Go 项目就是一个模块(Module),模块根目录下必须有go.mod文件。


二、依赖管理:go.mod 和 go.sum

2.1 go.mod — 模块定义文件

类似于 Node.js 的package.json,但更简洁。用go mod init创建:

go mod init 项目名

生成的go.mod示例:

module gotest ← 模块名 go 1.24 ← Go 版本 require ( ← 依赖的第三方包 github.com/xxx v1.2.3 )

2.2 go.sum — 依赖锁文件

类似于package-lock.jsonyarn.lock不要手动编辑,由 Go 自动维护。

作用:

  • 记录每个依赖包的哈希值
  • 确保每次下载的依赖内容一致
  • 防止依赖被篡改

2.3 常用依赖命令

# 添加依赖(在代码中 import 后,go mod tidy 会自动下载)go mod tidy# 整理依赖:添加需要的,移除没用的# 查看依赖go list-mall# 列出所有依赖# 下载依赖到本地缓存go mod download# 将依赖复制到 vendor 目录(可选,类似于 node_modules)go mod vendor

三、GoLand 创建项目的三种模式

创建项目时会看到三个选项:

模式说明什么时候用
Go普通的 Go 项目,使用 Go Modules,最常用✅ 默认选择
Go (GOPATH)老式 GOPATH 模式项目❌ 除非维护老项目
App EngineGoogle App Engine 专用❌ 几乎用不到

现在一律选第一个「Go」模式,它自动启用 Go Modules。


四、最简单的代码结构

一个最小的 Go 项目:

myapp/ ├── go.mod ← go mod init 生成 └── main.go ← 入口文件
// main.go — 最简单的 Go 程序packagemain// 可执行程序必须用 package mainimport"fmt"// 标准库:格式化输入输出funcmain(){// 程序入口fmt.Println("Hello, Go!")}

五、常用运行命令

# 直接运行(编译 + 运行,不生成文件)go run main.go# 编译为可执行文件go build# 生成 .exe(Windows)或 可执行文件(Linux/Mac)# 编译并安装到 GOBIN 目录goinstall# 格式化代码(Go 官方标准)gofmt-l.# 检查格式gofmt-w.# 自动修正格式# 静态检查go vet ./...# 检查代码中可能的 bug# 查看环境信息goenv# 打印所有环境变量go version# 查看 Go 版本

run vs build 区别

命令作用生成文件
go run编译并运行,适合开发调试❌ 不生成
go build编译为可执行文件✅ 生成
go install编译并安装到GOBIN✅ 安装到全局

六、小结

知识点一句话
GOPATH旧的项目组织方式,默认~/go
Go Modules现在的标准,任何目录都能当项目
go.mod项目身份证,类似 package.json
go.sum依赖锁文件,自动维护
go run直接跑代码
go build编译出可执行文件
http://www.cnnetsun.cn/news/4143924.html

相关文章:

  • TikTok Shop上架软件:轻松管理200+店铺的底层防风控实战
  • 基于Python的电商用户消费行为分析(源码+lw+部署文档+讲解等)
  • 基于Flink CDC实现MySQL到Elasticsearch秒级数据同步实战
  • 告别无效改词句:人文社科综述降AIGC的五步实操法(附差异化方案)
  • 头歌实践教学平台:大数据存储2023(一)
  • 告别复制粘贴:用浏览器插件GaryPrompt构建高效AI提示词工作流
  • CODESYS轴组直线与圆弧插补实战:ST语言编程与调试指南
  • 机关人员Markdown办公实用教程:10分钟掌握AI时代的“普通话“
  • Montserrat 字体免费商用终极指南:9 种字重 + 3 个家族,从装到用一次讲透
  • KMS_VL_ALL_AIO 快速上手指南:Windows 与 Office 离线 KMS 激活 10 分钟跑通
  • 5分钟上手:从零搭建个人 WebDAV 服务器的实战教程
  • SaaS系统用户权益升级Bug排查:从Max 20x失效看权限一致性保障
  • EAappEmulater:不装EA客户端也能启动战地等EA游戏,玩家必备的Origin轻量替代
  • grepWin 多语言支持原理拆解:28 种语言是怎么做到的
  • 3D打印磁吸模块化移动电源:基于32140电池的DIY设计与实现
  • 第一次见这么漂亮的出入库登记表!被领导夸了无数次
  • hactool 完整指南:快速解析、解密并提取 Switch 游戏文件
  • OpenClaw AI代理框架从零部署指南:解决Node.js版本与LLM配置难题
  • 5分钟搭好WebDAV文件服务器:一份完整的入门到生产指南
  • 秋招实战指南:从准备到offer选择的完整复盘
  • 常见电路设计——(1)超级电容充电电路
  • AI研究智能体安全:深度解析FORGE轨迹劫持攻击与四层防御体系
  • 如何快速上手 FakeLocation:安卓应用级虚拟定位完整指南
  • 华为S系列园区交换机维护宝典:设备环境检查
  • 智能体对抗范式下 Phishing3.0 威胁演化与企业防御体系研究
  • 抗钓鱼多因素认证机理与企业无扰动部署策略研究
  • 投保前患病,保单生效或复效180天后确诊,保险公司能以非初次拒赔吗
  • 探索min函数的强大功能
  • 怎样做好GEO推广?让AI主动推荐你品牌的5个核心策略
  • 基于声明式策略实现Git推送动态权限控制:从SQL-Like规则到执行引擎