打造DiTing聊天室之從零開始:準備工作指南

DanMu發表於2024-03-31

前言

Hello,我是單木。接下來我將會開啟一個新的部落格系列,使用 GoLang 從 0 到 1 實現一個IM聊天室專案。

為什麼要做這個專案

說實話,作為一個Javer,我對於 Go 的瞭解也還僅限於前兩天時間剛剛突擊的基本語法,但是沒辦法,我即將實習的公司採用 Go 作為技術棧,我只能開始轉戰 Go 的旅程。作為一個 Go 語言的新手,我肯定會遇到各種各樣的問題和挑戰。正因為如此,我希望透過記錄我的學習過程和解決問題的方法,能夠幫助其他新手更好地理解和應對在學習 Go 語言過程中可能遇到的困難。我希望,透過分享我的經驗和教訓,我能夠為那些正在踏上學習 Go 語言之路的人們提供一些有價值的幫助和指導。廢話少說,讓我們進入正題。

專案構建

建立一個空白專案

如果下載安裝 Go 和建立一個專案網上已經有許多非常優秀的教程了,這裡請允許我偷個懶,如果有需要,這裡提供兩個連線,請大家自行閱讀Go 安裝GoLand 的安裝和使用
接下來我們建立一個全新的專案,這裡就叫做DiTing-Go好了,那麼現在一個空白的 Go 專案就搭建好了。

專案的層級

好了,現在我們先不考慮具體的實現細節,我們先來對專案的功能做一個層次上的劃分。首先,每一個 Go 程式都需要有一個main.go作為程式的執行入口。其次,對於一個Web專案來說,任何一個功能都是按照下圖中的流程進行的。

其中,路由層負責根據使用者訪問的路徑將請求轉發給不同的控制器,控制層負責進行簡單的邏輯處理,複雜的業務邏輯則應該呼叫服務層進行處理。模型層則負責和資料庫進行互動。因此我們可以同樣按照這個順序來對專案進行劃分。同時,在專案中還會存在一些固定的配置以及專案中產生的日誌,這兩個部分也應當被單獨劃分。最終專案的層級結構如下:

├── conf                    #專案配置檔案目錄
│   └── config.yaml         #例如:toml、yaml等等
├── controllers             #控制層目錄
├── services                #服務層目錄
├── models                  #模型層目錄,和資料庫表的對映儲存在這裡
├── routes                  #路由目錄,負責分發請求
├── logs                    #日誌檔案目錄,儲存專案執行過程中產生的日誌。
├── main.go                 #專案入口
├── README.md
├── .gitignore

搭建一個簡單的Web

接下來,我們就可以開始搭建我們的 Web 專案了。現在 Go 的生態中已經存在了大量的 Web 框架可以幫助我們快速的開發,這裡簡單介紹一下常見的 Web 框架。

框架選型

名稱 優點 缺點 地址
iris 主要側重於Web開發,提供了Web開發的一系列功能元件,基於MVC開發模式。iris這一年發展比較快,從一個Web Server的元件,也慢慢朝著beego的設計方向努力。 號稱效能最強,結果平平。非模組化設計。最近兩年開始朝beego方向發展,但整體框架能力還不完備,需要加油。 https://github.com/kataras/iris
beego 開源的比較早,最早的一款功能比較全面的Golang開發框架,一直在Golang領域有著比較大的影響力,作者謝大多年組織著國內影響力比較大GopherCN活動。beego有著比較豐富的開發模組、開箱即用,提供了基於MVC設計模式的專案結構、開發工具鏈,主要定位為Web開發,當然也可以用於非Web專案開發。 起步較早,自謝大創業後,近幾年發展較慢。非模組化設計,對第三方重量級模組依賴較多。 https://github.com/beego/beego
gin 專注於輕量級的Web Server,比較簡單,易於理解,路由和中介軟體設計不錯,可以看做替代標準庫net/http.Server的路由加強版web server。獻給愛造輪子的朋友們。 功能簡單易用,既是優點,也是缺點。 https://github.com/gin-gonic/gin

考慮到文件的完善程度和使用的普遍程度,DiTing 中將採用 Gin 作為 Web 開發框架。

開始搭建

安裝 Gin

  1. 初始化 Go專案,我們首先需要再專案根目錄中開啟cmd,輸入以下命令進行專案初始化以及 Gin 的安裝
#初始化專案,別忘了!
go mod init DiTing

#安裝gin框架
go get -u github.com/gin-gonic/gin

搭建一個簡單的 Gin Demo

// 注意,這裡必須是main才能成為專案的入口
package main

// 匯入Gin
import (
    "github.com/gin-gonic/gin"
)

func main() {
    router := gin.Default()

    router.GET("/", func(ctx *gin.Context) {
        // 簡單返回一個json
        ctx.JSON(200, gin.H{
            "code": 0,
            "msg":  "ok",
        })
    })
    // 執行埠,訪問地址應該是127.0.0.1:5000
    err := router.Run(":5000")
    if err != nil {
        return
    }
}

測試

採用curl命令進行簡單的測試,在cmd中輸入

curl 127.0.0.1:5000
// 響應 {"code":0,"msg":"ok"}

控制檯輸入對應的日誌,Demo搭建成功

問題記錄

安裝 Gin 報錯

go get -u github.com/gin-gonic/gin
go: module github.com/gin-gonic/gin: Get "https://proxy.golang.org/github.com/gin-gonic/gin/@v/list": dial tcp 142.251.42.241:443: connectex: A connection attempt failed because the connected party did not properly respond after a period of time, or established connection failed because connected host has failed to respond.

這是因為國內無法訪問到國外的倉庫,需要將下載地址更換為國內映象

解決方法

go env -w GOPROXY=https://goproxy.cn

點關注,不迷路

好了,以上就是這篇文章的全部內容了,如果你能看到這裡,非常感謝你的支援!

如果你覺得這篇文章寫的還不錯, 求點贊👍 求關注❤️ 求分享👥 對暖男我來說真的 非常有用!!!

白嫖不好,創作不易,各位的支援和認可,就是我創作的最大動力,我們下篇文章見!

如果本篇部落格有任何錯誤,請批評指教,不勝感激 !

本文的 Github,歡迎各位人才快快用Star砸倒我。如果想要加入這個專案或者有任何建議,歡迎聯絡

打造DiTing聊天室之從零開始:準備工作指南

相關文章