跟著官網學Go之基于Gin開發一個簡單的RESTful API
前面已經將Go1.17.6安裝好了,這一小節,繼續跟著官網學習基于Gin開發RESTful API
環境準備
這里,我在E盤新建一個名為ginrest的文件夾,然后用vscode打開該文件夾,繼續使用cmd命令進入到E:\ginrest文件夾,然后執行go mod init命令
此時,在該文件夾下會生成一個名為go.mod的文件
新建main.go
前面基礎準備好后,我們就需要準備程序該有的入口,那便是新建一個main.go文件,
在該文件中加入包名package main
我繼續新建一個名為album的struct,go中的struct類似于C#中的類,在Go中,定義一個struct的標準格式如下
type 名 struct{
字段名 字段類型
}
我們在該struct中加入一些字段屬性
type album struct {
Id string `json:"id"`
Title string `json:"title"`
Artist string `json:"artist"`
Price float64 `json:"price"`
}
我們可以看到類型后面用json標識了別名,其主要作用則是當該struct序列化成json時,會序列化為該別名,如果沒有別名則按屬性名展示。
我新建一個album的數組,主要是為后續數據讀取做準備
var albums = []album{
{Id: "1", Title: "Blue Train", Artist: "John Coltrane", Price: 56.99},
{Id: "2", Title: "Jeru", Artist: "Gerry Mulligan", Price: 17.99},
{Id: "3", Title: "Sarah Vaughan and Clifford Brown", Artist: "Sarah Vaughan", Price: 39.99},
}
使用Gin
前面把基礎的準備工作已經做好了,現在便是進入主題,開始使用Gin,引入Gin包,現在main.go中使用import導入包并編寫main方法,在main方法中使用gin創建一個簡單的Http服務器
import "github.com/gin-gonic/gin"
func main() {
router := gin.Default()
router.Run("0.0.0.0:8080")
}
這里是0.0.0.0:8080是監聽本機的8080端口,其實也可以直接使用:8080,如:router.Run(":8080"),端口號可以自行調整,如果不指定,默認端口號也是8080。此時通過cmd執行go get .來下載gin的依賴包,這是不是類似.Net里面的Nuget包管理呢?
依賴包下載完成后,此時,我們的go.mod文件便會新增一來記錄,并且會多出一個go.sum的文件,它為我們記錄了依賴包版本信息。
此時,我們的程序就可以運行了,
這時,我們訪問一下8080端口,服務端會返回404 page not found,那是因為我們現在什么都還沒有做,
我們繼續來分別實現獲取(getAlbums)和添加(postAlbums)兩個方法,Go語言中的方法和C#有些差別,
C#中大概就是這樣子
public List<Albums> GetAlbums(){
}
Go中需要func關鍵字來申明,下面就跟著官網的例子繼續寫
func getAlbums(c *gin.Context) {
c.IndentedJSON(http.StatusOK, albums)
}
func postAlbums(c *gin.Context) {
var newAlbum album
if err := c.BindJSON(&newAlbum); err != nil {
return
}
albums = append(albums, newAlbum)
c.IndentedJSON(http.StatusCreated, newAlbum)
}
接下來就是將方法注冊到Gin的路由中
router.GET("/albums", getAlbums)
router.POST("/albums", postAlbums)
這里的注冊的路由路徑都是/albums,通過Get和Post這兩種請求方式來區分不同的邏輯
現在運行起來后,在瀏覽器訪問
http://localhost:8080/albums便能正常返回數據
接下來,使用postman發起post請求,當服務端接受到請求后,會將提交的數據追加到數組中
這里只是使用Gin來實現簡單的Get和Post,就從這個簡單的示例中,我們可以感受到它的靈活和簡潔,后面我們再繼續跟進學習,最好是結合實際例子來做些小應用。