优秀的吉祥物设计网站,比较大的做网站的公司有哪些,注册城乡规划师有用吗,自适应网站建站gin-gonic介绍Go 语言最近十分火热#xff0c;但对于新手来说#xff0c;想立马上手全新的语法和各种各样的框架还是有点难度的。即使是基础学习也很有挺有挑战性。在这篇文章中#xff0c;我想用最少的代码写出一个可用的 API 服务。这个 API 可以提供增删改查(CRUD)这些基…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 mainimport fmtfunc main() {fmt.Println(Hello World)}我们先测试一下。$ go run main.goHello World非常好现在让我们把 Gin 框架的代码加进去。package mainimport github.com/gin-gonic/ginfunc 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_MODErelease— 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:8080Hello World成功了不过我们是在写 API没人会返回字符串的把返回值改成 JSON 格式吧。package mainimport github.com/gin-gonic/ginfunc 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 mainimport (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 mainimport (github.com/jinzhu/gorm_ github.com/jinzhu/gorm/dialects/sqlite)type Person struct {ID uint json:idFirstName string json:firstnameLastName 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 mainimport (github.com/jinzhu/gorm_ github.com/jinzhu/gorm/dialects/sqlite)type Person struct {ID uint json:idFirstName string json:firstnameLastName 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 Persondb.First(p3)fmt.Println(p1.FirstName)fmt.Println(p2.LastName)fmt.Println(p3.LastName)}到目前为止都很顺利执行一下程序看看能得到什么结果。$ go run main.goJohnSmithDoe写起来还是挺简单的吧不用几行代码我们就可以从数据库中存取信息了。Gorm 还有很多其他特性接下来让我们再试试其中比较重要的功能当然要了解更多信息的话请查看 Gorm 的文档。