04 | 初始化 fastgo 项目仓库

提示:

  • 所有体系课见专栏:Go 项目开发极速入门实战课;
  • 欢迎加入我的训练营:云原生AI实战营,一个助力 Go 开发者在 AI 时代建立技术竞争力的实战营;
  • 本节课最终源码位于 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 mainimport "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!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/diannao/73008.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

Docker 安装成功后,安装 Dify 中文版本的步骤

Docker 安装成功后,安装 Dify 中文版本的步骤如下1: 克隆 Dify 代码仓库:在终端中执行以下命令,将 Dify 源代码克隆至本地环境。 bash git clone https://github.com/langgenius/dify.git进入 Dify 的 docker 目录: b…

RPC服务调用深度解析:从原理到Java实践

一、RPC的核心原理与架构设计 1.1 RPC的本质 RPC(Remote Procedure Call)是一种分布式系统间通信协议,允许程序像调用本地方法一样调用远程服务。其核心目标是通过位置透明性和协议标准化隐藏网络通信细节。RPC的调用流程可抽象为以下步骤&…

电脑的写字板如何使用?

打开写字板: 直接按一下键盘上的win R 键,然后输入:write , 再按一下回车 , 即可打开写字板 可以在里面写文字 和 插入图片等… , 如下所示: 保存写字板内容: 当我们写好了之后,…

医疗AI测试实战:如何确保人工智能安全赋能医疗行业?

一、医疗AI测试的重要性 人工智能(AI)正广泛应用于医疗行业,如疾病诊断、医学影像分析、药物研发、手术机器人和智能健康管理等领域。医疗AI技术的应用不仅提高了诊断效率,还能降低误诊率,改善患者治疗效果。然而&…

AI日报 - 2025年3月12日

AI日报 - 2025年3月12日 🌟 今日概览(60秒速览) ▎🤖 AGI突破 | Anthropic CEO预测AI将主导代码编写 🔬 自训练技术显著提升LLM思维清晰度 ▎💼 商业动向 | OpenAI与CoreWeave达成119亿美元基建协议 &…

跳表数据结构

跳表(Skip List)是一种支持高效插入、删除和查找的链表结构,用于加速查找操作,特别适用于有序数据集合。它在Redis、LevelDB等系统中被用于**有序集合(Sorted Set)**的实现。 1. 跳表的结构 跳表的核心思…

系统会把原先的对话状态堆栈从 [“assistant“] 更新为 [“assistant“, “update_flight“]这个更新的处理过程

这个更新主要是在 State 定义中通过 Annotated 来自动处理的。在 State 类型中,我们对 dialog_state 字段绑定了 update_dialog_stack 函数,如下所示: class State(TypedDict):messages: Annotated[list[AnyMessage], add_messages]user_inf…

HTTP发送POST请求的两种方式

1、json String json HttpRequest.post(getUrl(method, "v1", url, userId, appKey)).header("Content-type", "application/json") // 设置请求头为 JSON 格式.body(JSONUtil.toJsonStr(params)) // 请求体为 JSON 字符串.execute().body(); …

Windows 万兴恢复专家 Wondershare Recoverit-v13.5.7.9-[电脑数据恢复工具]

Windows 万兴恢复专家Wondershare_Recoverit 链接:https://pan.xunlei.com/s/VOL3z608vzAj_IYTvH-F1q7kA1?pwdiu89# 1. 打开Setup.exe进行安装,安装完不要打开软件,记住安装目录 2. 将"Crack"文件夹内的所有文件复制到安装目录 …

Blender UV纹理贴图,导出FBX到Unity

加载ps好的模型贴图。右下角选择《材质》基础色里面选择《图像纹理》,选择你的图片。 选择上面UV选项卡。左上角选择UV编辑器。选中物体,TAB进入编辑模式。即可调整映射的图像范围。 其中渲染设置可以在左侧下边脱出。 导出带纹理FBX模型 路径选择复…

华为hcia——Datacom实验指南——以太网帧和IPV4数据包格式(一)

实验开始 第一步配置环境 第二步配置客户端 如图所示,我们把客户端的ip配置成192.168.1.10,网关设为192.168.1.1 第三步配置交换机1 system-view sysname LSW1 vlan batch 10 interface ethernet0/0/1 port link-type access port default vlan 10 qu…

解锁 Ryu API:从 Python 接口到 REST 设计全解析

Ryu 4.34 版本的 API 功能分类、核心接口说明及示例代码,结合其 Python 应用开发接口和 REST API 的设计特点进行综合解析: 一、Python 应用开发 API Ryu 的核心能力通过 Python 类库实现,开发者需继承 RyuApp 类并注册事件处理函数。 1. 应…

如何在需求分析阶段考虑未来扩展性

在需求分析阶段考虑未来扩展性的关键在于 前瞻规划、灵活架构、标准设计。其中,前瞻规划尤为重要,因为通过全面分析业务发展趋势与技术演进,能够在初期设计阶段预留足够扩展空间,降低后期改造成本,为企业长期发展奠定坚…

Docker搭建Redis哨兵模式【一主两从三哨兵】

Docker搭建Redis哨兵模式 系统: CentOS 7 Dockder 版本: VMware虚拟机 网络适配器 网络连接 桥接模式:直接连接物理网络查看IP命令 ip addr一、哨兵模式概述 1. 官方文档与关联博客 官方文档:https://redis.io/docs/latest/operate/oss_and_stack/management/sentinel关联博…

关于统计建模大赛的选题

文章目录 0.大赛主题1.量化分析和风险管理2.金融市场预测与统计建模3.投资与机器学习相关4.大数据和医疗5.智能制造相关的6.教育行业 0.大赛主题 统计创新应用数据引领未来:这个主题其实很宽泛,没有什么明确的这个要求,所以只要是和我们的统…

Docker 学习笔记:从入门到部署,实战演练全流程!

📌 开篇:为什么要学 Docker? 还在为环境不一致、部署麻烦、依赖冲突头疼吗?Docker 让一切变得简单!作为现代开发和运维的神器,Docker 让我们可以用 一句命令 解决 “在我电脑上能跑” 的问题。今天&#x…

ThinkPhp 5 安装阿里云内容安全(绿化)

composer require alibabacloud/green-20220302 首先要把php5(不支持php7)的执行文件设置到PATH环境变量 此外还要先执行composer update php5.5和php5.6的区别 5.5认为 <? 开头的也是php文件&#xff0c;包括 <?php 5.6认为 <? 开头的不是php文件&#xff0c;只…

使用NVM工具管理Node版本

Date: 2025.03.10 14:53:55 author: lijianzhan NVM&#xff08;Node Version Manager&#xff09;用于在同一个系统上管理多个 Node.js 版本,NVM 允许你安装、使用和切换不同的 Node.js 版本。这对于前端工作人员来说可以更方便的管理和维护不同nodejs版本的项目。 &#xff0…

Vue主流的状态保存框架对比

一、Vuex 4&#xff08;官方传统方案&#xff09; 优点&#xff1a; 官方背书&#xff1a;Vue 官方长期维护&#xff0c;成熟稳定。结构化清晰&#xff1a;通过 state/mutations/actions/getters 强制约定代码结构&#xff0c;适合大型团队协作。插件生态&#xff1a;支持中间…

AIGC视频生成模型:慕尼黑大学、NVIDIA等的Video LDMs模型

大家好&#xff0c;这里是好评笔记&#xff0c;公主号&#xff1a;Goodnote&#xff0c;专栏文章私信限时Free。本文详细介绍慕尼黑大学携手 NVIDIA 等共同推出视频生成模型 Video LDMs。NVIDIA 在 AI 领域的卓越成就家喻户晓&#xff0c;而慕尼黑大学同样不容小觑&#xff0c;…