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 服务 (一)的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: html风车相册代码,Css Html
- 下一篇: 微型计算机上的南桥芯片功能,微型计算机及