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.pswp.cn/diannao/73008.shtml
繁體地址,請注明出處:http://hk.pswp.cn/diannao/73008.shtml
英文地址,請注明出處:http://en.pswp.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;…