iT邦幫忙

2022 iThome 鐵人賽

DAY 24
0
Software Development

30天學會Golang系列 第 24

Day24 - Go的後端架構介紹

  • 分享至 

  • xImage
  •  

後端架構介紹

接下來的幾篇會搭使用 gin 來講解後端架構的雛形,首先最基本的架構如下所示

  • app
    • middleware (中間件,可以當作會高機率觸發的函式,例如獲取與檢測 jwt 行為等)
    • controllers (從models層取出來的東西,加工後獲得想要的樣子)
    • models (從資料庫拿東西)
  • database (定義與連接資料庫)
  • routers (專門給 main.go 使用的)
    • api (放 router.go 會用到的函式)
    • router.go (設定路徑與其相對應的函式)
  • main.go (同常只會引用 router 與執行的 port)
  • go.mod (導入函式庫)
  • .env (定義隱私的常數,類似密碼之類的敏感資訊)

如下圖所示:

https://ithelp.ithome.com.tw/upload/images/20221005/20150797N1gOPa6L8K.png

那我們今天先做一個最簡單的模型,就是打一支 api,該 api 能給出一筆資料,所謂的打 api 指的是模擬前端去呼叫一個網址,透過呼叫網址來執行一個功能,由於還不需要跟資料庫有互動,因此 app 與 database 的部分暫時不用定義,那我們會用到的有三個東西,分別為 routers 的 api 與 router 及 main:

  • api 負責給資料
  • router 負責定義什麼網址能觸發這個功能
  • main 執行程式與定義 port
// api.go
package v1

import (
	"net/http"

	"github.com/gin-gonic/gin"
)

// 如果是要給前端的 api,函式只能有一個輸入參數 *gin.Context 且不能有輸出
func HelloWorld(c *gin.Context) {
    // 包成 json 的格式丟給前端
	c.JSON(http.StatusOK, gin.H{
		"data": "Hello world!",
	})
}

// router.go
package routers

import (
	v1 "it/day24/routers/api/v1"

	"github.com/gin-gonic/gin"
)

func InitRouter() *gin.Engine {
	r := gin.Default()
	// 定義前端打的 api 路徑
	r.GET("/v1/hello_world", v1.HelloWorld)
	return r
}
// main.go
package main

import "it/day24/routers"

func main() {
	r := routers.InitRouter()

    // 定義在哪個 port 上執行
	r.Run(":8080")
}

執行 main,go 的時候,順利就可看到以下畫面

➜  day24 go run main.go
[GIN-debug] [WARNING] Creating an Engine instance with the Logger and Recovery middleware already attached.

[GIN-debug] [WARNING] Running in "debug" mode. Switch to "release" mode in production.
 - using env:   export GIN_MODE=release
 - using code:  gin.SetMode(gin.ReleaseMode)

[GIN-debug] GET    /v1/hello_world           --> it/day24/routers/api/v1.HelloWorld (3 handlers)
[GIN-debug] [WARNING] You trusted all proxies, this is NOT safe. We recommend you to set a value.
Please check https://pkg.go.dev/github.com/gin-gonic/gin#readme-don-t-trust-all-proxies for details.
[GIN-debug] Listening and serving HTTP on :8080

看到這個畫面,我們就可以利用 postman 來測試看看,首先先安裝官網 postman,理論上是免費的,所以如果遇到要收費的請先打著,別衝動,安裝好後會看到出現這個圖示

https://ithelp.ithome.com.tw/upload/images/20221005/20150797SxDbaTE4RL.png

點擊後按照步驟 1 與 2 後,就可以看到結果 3

https://ithelp.ithome.com.tw/upload/images/20221005/20150797SRtLt6vZvL.png

第24天報到,這個架構一開始看到會有點不適應,覺得大費周章搞一堆有的沒的,但隨著資料庫的使用,後來就會覺得這樣的架構很清楚

代碼連結

https://github.com/luckyuho/ithome30-golang/tree/main/day24


上一篇
Day23 - Go的網頁框架 gin
下一篇
Day25 - Go的 gorm 資料庫處理 - DBeaver
系列文
30天學會Golang31
圖片
  直播研討會
圖片
{{ item.channelVendor }} {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言