日韩av黄I国产麻豆传媒I国产91av视频在线观看I日韩一区二区三区在线看I美女国产在线I麻豆视频国产在线观看I成人黄色短片

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 >

ginapi服务器性能,如何使用 Gin 和 Gorm 搭建一个简单的 API 服务 (一)

發布時間:2025/3/11 37 豆豆
生活随笔 收集整理的這篇文章主要介紹了 ginapi服务器性能,如何使用 Gin 和 Gorm 搭建一个简单的 API 服务 (一) 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

gin-gonic

介紹

Go 語言最近十分火熱,但對于新手來說,想立馬上手全新的語法和各種各樣的框架還是有點難度的。即使是基礎學習也很有挺有挑戰性。

在這篇文章中,我想用最少的代碼寫出一個可用的 API 服務。這個 API 可以提供增刪改查(CRUD)這些基本功能,對象關系映射 (ORM) 讓數據庫操作變得非常簡單,不用 100 行代碼,都可以搞定。讓我們開始吧。

起步

Gin

既然是搭建 API 服務,就需要一個 Web 框架來處理路由并響應 HTTP 請求,Go 語言有很多各式各樣的開源框架,本文我們選用了 Gin https://github.com/gin-gonic/gin。Gin 的特點是響應速度快,結構簡單。

我們先來給 API 服務創建文件夾和 main.go 文件吧。

$ mkdir -p $GOPATH/src/simple-api

$ cd $GOPATH/src/simple-api

$ touch main.go

代碼如下

package main

import "fmt"

func main() {

fmt.Println("Hello World")

}

我們先測試一下。

$ go run main.go

Hello World

非常好,現在讓我們把 Gin 框架的代碼加進去。

package main

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

func main() {

r := gin.Default()

r.GET("/", func(c *gin.Context) {

c.String(200, "Hello World")

})

r.Run()

}

保存并運行。

$ go run main.go

[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 / → main.main.func1 (3 handlers)

[GIN-debug] Environment variable PORT is undefined. Using port :8080 by default

[GIN-debug] Listening and serving HTTP on :8080

[GIN] 2016/12/02–14:57:52 | 200 | 33.798μs | ::1 | GET /

在瀏覽器中訪問地址 http://localhost:8080

Hello World

成功了!!!

不過我們是在寫 API,沒人會返回字符串的,把返回值改成 JSON 格式吧。

package main

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

func main() {

r := gin.Default()

r.GET("/", func(c *gin.Context) {

c.String(200, "Hello World")

c.JSON(200, gin.H{

"message": "Hello World",

})

})

r.Run()

}

保存文件,重新運行 API server,刷新瀏覽器,返回值變成了 JSON。

{“message”: “Hello World”}

用 GORM 把數據持久化

現在讓我們考慮一下服務的持久化層,在這部分中,我們將把數據保存在一個本地 SQLite 文件中,在稍后的章節中,我們將改為 MySQL。

Gorm http://jinzhu.me/gorm/ 是一個 Go 語言實現的對象關系映射 (ORM) 框架。它簡化了程序對數據庫的操作,雖然我不是很贊同在大型的復雜系統中使用 ORM,但 ORM 在小項目中做做原型驗證還是很不錯的。Gorm 是 Go 的生態中很流行的工具,所以我們先從這里入手吧。

我們從頭開始,先把之前的代碼去掉,在瀏覽了 GORM 的主要功能后,再把 Gin 的代碼加回來。先來個簡單的例子:

package main

import (

"github.com/jinzhu/gorm"

_ "github.com/jinzhu/gorm/dialects/sqlite"

)

func main() {

db, _ := gorm.Open("sqlite3", "./gorm.db")

defer db.Close()

}

執行程序后,在運行環境的文件系統里可以看到一個新文件 gorm.db。這就是 API 的數據庫文件了。我們的 API 程序現在還沒什么功能,讓我們再加點代碼吧。

package main

import (

"github.com/jinzhu/gorm"

_ "github.com/jinzhu/gorm/dialects/sqlite"

)

type Person struct {

ID uint `json:"id"`

FirstName string `json:"firstname"`

LastName string `json:"lastname"`

}

func main() {

db, _ := gorm.Open("sqlite3", "./gorm.db")

defer db.Close()

p1 := Person{FirstName: "John", LastName: "Doe"}

p2 := Person{FirstName: "Jane", LastName: "Smith"}

fmt.Println(p1.FirstName)

fmt.Println(p2.LastName)

}

我們剛剛加了一個叫 Person 的結構體,然后建了幾個 Person 類型的實例,并打印了里面的值。請注意結構體 Person 里的每個域的名字必須是大寫字母開頭的,這樣 Go 語言才認為這是一個共有域。

package main

import (

"github.com/jinzhu/gorm"

_ "github.com/jinzhu/gorm/dialects/sqlite"

)

type Person struct {

ID uint `json:"id"`

FirstName string `json:"firstname"`

LastName string `json:"lastname"`

}

func main() {

db, _ := gorm.Open("sqlite3", "./gorm.db")

defer db.Close()

db.AutoMigrate(&Person{})

p1 := Person{FirstName: "John", LastName: "Doe"}

p2 := Person{FirstName: "Jane", LastName: "Smith"}

db.Create(&p1)

var p3 Person

db.First(&p3)

fmt.Println(p1.FirstName)

fmt.Println(p2.LastName)

fmt.Println(p3.LastName)

}

到目前為止都很順利,執行一下程序看看能得到什么結果。

$ go run main.go

John

Smith

Doe

寫起來還是挺簡單的吧,不用幾行代碼,我們就可以從數據庫中存取信息了。Gorm 還有很多其他特性,接下來讓我們再試試其中比較重要的功能,當然,要了解更多信息的話,請查看 Gorm 的文檔。

總結

以上是生活随笔為你收集整理的ginapi服务器性能,如何使用 Gin 和 Gorm 搭建一个简单的 API 服务 (一)的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。