首頁 > 後端開發 > Golang > 主體

golang api搭建

WBOY
發布: 2023-05-21 14:11:07
原創
791 人瀏覽過

Golang是一種專門為建構高並發的服務和網頁應用而設計的程式語言。 Golang具有高效的並發和網頁程式設計能力,這使得它成為許多開發者的首選。要建立一個Golang API,我們需要掌握許多基本概念和技能,從路由處理到資料庫存取等等。本文將介紹如何使用Golang建構API。

一、環境準備

在開始建置Golang API之前,需要在電腦上安裝Golang。可以透過Golang官方網站(https://golang.org/)下載最新版本的Golang,也可以透過套件管理器來安裝,如apt-get或yum等。安裝完成後,在終端機中輸入「go version」驗證安裝是否成功。

二、依賴套件安裝

在終端機中使用「go get」指令安裝所需的依賴套件。依賴套件是我們在API中經常使用的一些庫,例如“gorilla/mux”和“gorm”等。安裝方法如下:

go get github.com/gorilla/mux 
go get github.com/jinzhu/gorm 
go get github.com/go-sql-driver/mysql
登入後複製

三、路由處理

所有API請求都需要透過路由來完成。 Golang中最受歡迎的路由包之一是gorilla/mux,因此我們也將使用它。

為了使用gorilla/mux,我們需要導入套件並建立一個新的mux物件。在這個範例中,我們將建立兩個路由,一個用於顯示API主頁,另一個用於處理我們的GET請求。

package main

import (
    "fmt"
    "net/http"

    "github.com/gorilla/mux"
)

func main() {
    router := mux.NewRouter()

    router.HandleFunc("/", Index)
    router.HandleFunc("/tasks", getTasks).Methods("GET")

    http.ListenAndServe(":8000", router)
}

func Index(w http.ResponseWriter, r *http.Request) {
    fmt.Fprintln(w, "Welcome to my API!")
}

func getTasks(w http.ResponseWriter, r *http.Request) {
    fmt.Fprintln(w, "You have requested all tasks")
}
登入後複製

在上面的程式碼中,我們建立了兩個處理函數,Index和getTasks。 Index函數用來顯示API主頁,getTasks處理所有的GET請求。

四、資料庫存取

現在我們將向API中新增資料庫功能。在本例中,我們將使用MySQL資料庫,並使用gorm函式庫來管理資料。

首先,我們需要建立一個資料庫連線。為此,我們需要建立一個Database struct,其中包含了連接的詳細資訊。接下來,我們將建立一個新的「openDB」函數來開啟連線。

...

import (
    "database/sql"
    "log"

    _ "github.com/go-sql-driver/mysql"
    "github.com/jinzhu/gorm"
)

type Database struct {
    *gorm.DB
}

func (db *Database) openDB() {
    dsn := "username:password@tcp(127.0.0.1:3306)/godb?charset=utf8&parseTime=True"
    conn, err := sql.Open("mysql", dsn)
    if err != nil {
        log.Fatal(err)
    }

    db.DB = gorm.Open("mysql", conn)
}
登入後複製

我們現在需要在main函數中建立一個新的Database對象,並使用openDB函數開啟連線。

db := new(Database)
db.openDB()
登入後複製

接下來,我們將建立一個Task Model,與我們的任務清單相關聯。 Model只是一個普通的Go結構體,它將被映射到我們的MySQL資料庫中的表。

type Task struct {
    Id      int    `gorm:"primary_key;auto_increment"`
    Name    string `gorm:"not null"`
    Content string `gorm:"not null"`
}
登入後複製

為了建立一個新的任務,我們將建立一個名為「createTask」的處理函數。這個函數將從HTTP請求中接收JSON數據,解析它,並將它插入到我們的資料庫中。

func createTask(w http.ResponseWriter, r *http.Request) {
    db := new(Database)
    db.openDB()

    task := &Task{}
    task.Name = r.FormValue("name")
    task.Content = r.FormValue("content")

    db.Create(&task)
    fmt.Fprintln(w, "Task successfully created")
}
登入後複製

我們看到「createTask」函數在開始時建立了一個新的Database物件和Task物件。然後,它從HTTP請求中解析JSON數據,並透過呼叫db.Create()方法將其插入到資料庫中。

最後,我們將更新我們的路由「router.HandleFunc」以包含新的路由。

router.HandleFunc("/tasks", createTask).Methods("POST")
登入後複製

五、Middleware

中介軟體是一種常見的技術,用於在處理請求之前或之後執行操作。它們不僅在Golang中廣泛使用,而且在其他語言中也很常見。來看看如何使用中間件在Golang API中加入一些附加功能。

在Golang中,中間件是一種以HTTP處理函數為參數的函數。它們允許在處理請求之前或之後執行一些邏輯。在下面的範例中,我們將建立一個名為「withLogging」的中間件,它將記錄所有API請求的細節。

func withLogging(next http.Handler) http.Handler {
    return http.HandlerFunc(func(w http.ResponseWriter, r *http.Request) {
        log.Println(r.Method, r.URL.Path)
        next.ServeHTTP(w, r)
    })
}
登入後複製

我們看到在函數中傳回了一個新的http.Handler函數,它記錄了請求的方法和URL路徑。 next.ServeHTTP(w, r)語句呼叫下一個處理程序,確保處理程序繼續處理API請求。

接下來,我們將更新我們的路由和處理程序以包含新的日誌記錄中間件。

router := mux.NewRouter()

router.Use(withLogging)

router.HandleFunc("/", Index)
router.HandleFunc("/tasks", createTask).Methods("POST")
router.HandleFunc("/tasks", getTasks).Methods("GET")
登入後複製

現在,在路由之前加入「router.Use(withLogging)」語句,我們將在所有路由請求上執行withLogging中間件。

六、總結

在本文中,我們介紹如何在Golang中使用gorilla/mux來處理路由,使用gorm來管理MySQL資料庫,以及如何使用中間件來增強我們的API。透過理解這些基本概念和技能,我們可以開始建立更複雜的Golang API。

以上是golang api搭建的詳細內容。更多資訊請關注PHP中文網其他相關文章!

來源:php.cn
本網站聲明
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn
熱門教學
更多>
最新下載
更多>
網站特效
網站源碼
網站素材
前端模板
關於我們 免責聲明 Sitemap
PHP中文網:公益線上PHP培訓,幫助PHP學習者快速成長!