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

04 | 初始化 fastgo 项目仓库

提示:

  • 所有体系课见专栏:Go 项目开发极速入门实战课;
  • 欢迎加入 云原生 AI 实战 星球,12+ 高质量体系课、20+ 高质量实战项目助你在 AI 时代建立技术竞争力(聚焦于 Go、云原生、AI Infra);
  • 本节课最终源码位于 fastgo 项目的 feature/s01 分支;
  • 更详细的课程版本见:Go 项目开发中级实战课:10 | 项目初始化(上):如何初始化一个 Go 项目仓库?

项目开发的第一步便是初始化一个项目目录,并根据 golang-standards/project-layout 目录规范,添加必要的目录及文件。

本节课,来给你介绍下如何初始化一个 Go 项目。

初始化一个 Go 项目,大概分为以下几步:

  1. 创建项目目录;
  2. 初始化目录为 Go 模块;
  3. 初始化目录为 Git 仓库;
  4. 创建需要的目录;
  5. 创建 Hello World 程序。

步骤 1:创建项目目录

开发 Go 项目的第 1 步便是创建一个项目目录。现今 Go 模块管理都是用的 Go Modules。虽然,在使用 Go Modules 的情况下,不再需要设置 GOPATH 环境变量。但是为了提高项目的维护性,这里还是建议将项目放在 GOPATH目录下。

初始化项目目录,操作命令如下:

$ mkdir -p $GOPATH/src/github.com/onexstack/fastgo # 创建项目目录
$ cd $GOPATH/src/github.com/onexstack/fastgo # 进入到项目目录中
$ echo "## fastgo 项目" >> README.md # 创建一个 README 文件,作为项目的第一个文件

步骤 2: 初始化目录为 Go 模块

Go 项目都需要将目录初始化为一个 Go 模块。所以,这里我们需要将 fastgo 目录初始化为一个 Go 模块。初始化命令如下:

$ go mod init # 1. 初始化 Go 模块
$ go work init . # 2. 初始化 Go 工作区(仅限多模块管理场景),生成 go.work 文件  
$ go work use . # 添加当前模块到 Go 工作区

步骤 3: 初始化目录为 Git 仓库

当前 Go 项目基本都是使用 Git 来管理项目源码的。所以,我们接下来还需要将目录初始化为一个 Git 仓库。

初始化为 Git 仓库的第一步,就是在当前目录添加一个 .gitignore 文件,里面包含不期望 Git 跟踪的文件,例如:临时文件等。你可以使用生成工具 gitignore.io 来生成 .gitignore

# 备份文件
*.bak
*~

# Go 工作区文件。Go 项目开发中,不建议将 Go 工作区文件提交到代码仓库
go.work
go.work.sum

# 日志文件
*.log

# 自定义文件
/_output

可以执行以下命令将 Go 项目仓库初始化为一个 Git 仓库:

$ git init # 初始化当前目录为 Git 仓库
$ git config user.name 孔令飞 # 设置仓库级别用户名
$ git config user.email colin404@foxmail.com # 设置仓库级别邮箱
$ git config --global credential.helper store # 永久保存凭据
$ git add . # 添加所有被 Git 追踪的文件到暂存区
$ git remote add origin https://github.com/onexstack/miniblog # 将本地仓库与远程仓库相关联
$ git commit -m "feat: 第一次提交" # 将暂存区内容添加到本地仓库中

之后,我们就可以在该目录下开发代码,并根据需要提交代码。提交后的源码目录内容如下:

$ ls -A
.git  .gitignore  go.mod  go.work  README.md

步骤 4: 创建需要的目录

执行以下命令预创建需要的目录:

$ mkdir -p cmd configs docs scripts
$ ls -F
cmd/  configs/  docs/  go.mod  go.work  README.md  scripts/

提前创建一些符合目录规范的空目录可以起到一下 2 个作用:

  • 提前规划目录相当于提前规划未来的功能,将未来要实现的功能以目录的形式固化在项目仓库中,起到记录的作用;
  • 提前创建目录有利于后续文件按照功能存放在预先规划好的目录中,从而使项目更加规范。否则,不同开发者可能会根据各自的开发习惯,创建各种各样的目录结构和目录名称。

因为 Git 默认不会追踪空目录,所以需要再空目录下创建 .keep 文件,创建命令如下:

$ touch configs/.keep docs/.keep scripts/.keep cmd/.keep

步骤 5: 创建 Hello World 程序

创建 cmd/fg-apiserver/ 目录(fg 是 fastgo 的简写):

$ mkdir -p cmd/fg-apiserver

新建 cmd/fg-apiserver/main.go,内容如下:

package main

import "fmt"

// Go 程序的默认入口函数。阅读项目代码的入口函数.
func main() {
    fmt.Println("Hello World!")
}

编译并运行,命令如下:

$ gofmt -s -w ./ # 格式化 Go 源码
$ go build -o _output/fg-apiserver -v cmd/fg-apiserver/main.go # 编译 fg-apiserver 组件源码
$ ls _output/ # _output 为二进制文件保存目录
fg-apiserver
$ _output/fg-apiserver # 启动 fg-apiserver 组件
Hello World!

相关文章:

  • tcp/ip协议中网络层协议的主要特点,tcp/ip协议中网络层都有哪些协议?
  • c# 2025/3/12 周三
  • MyBatis 的核心配置文件是干什么的? 它的结构是怎样的? 哪些是必须配置的,哪些是可选的?
  • AI重构SEO关键词布局
  • TA学习之路——1.4 MVP矩阵运算
  • 安全左移动赋能:灵脉IAST交互式应用安全测试平台
  • Python的日志
  • HarmonyOS学习第19天:感知世界的 “超能力”,HarmonyOS 传感器揭秘
  • ChātGPT开发“SolidWorks工具箱”,可建海量3D模型库,能一键画图、批量赋属性、自动出图,效率提高10倍
  • 浅拷贝和深拷贝AI
  • 复试数据库原理总结
  • Unity3D网格简化与LOD技术详解
  • Linux 内核文件读取与内存映射管理机制的理解心得
  • 「 机器人 」扑翼飞行器通过总气动力控制四自由度运动方法
  • LLM:了解大语言模型
  • Cadence 学习笔记(1)
  • 《解锁Flutter:跨平台开发的未来之光》
  • 【NLP 36、CRF条件随机场 —— 源码解读】
  • 告别复杂日志解析 用bin2sql轻松实现MySQL数据闪回
  • SpringBoot——Maven篇
  • 11家券商一季度净利翻番:9家利润超20亿,国泰海通居首
  • 强制性国家标准《危险化学品企业安全生产标准化通用规范》发布
  • 解放日报:上海深化改革开放,系统集成创新局
  • 自称“最美”通缉犯出狱当主播?央广网:三观怎能跟着“五官”跑
  • 主播说联播丨六部门出台新政!来华买买买,实惠多多多
  • 从 “沪惠保” 到 “沪骑保”看普惠保险的 “上海样式”