gin|青训营笔记

89 阅读2分钟

这是我参与「第五届青训营 」伴学笔记创作活动的第 9 天

Gin 是一个用 Go (Golang) 编写的 HTTP web 框架。

官方文档

如果还没有安装Go语言开发环境,参考一下我的这篇文章:

第 N 次Hello World ! Ready ?Go !

🍰 码云地址

完整demo代码放在码云上了,需自取

Gitee

🎯 新建项目初始化,以及安装

新建文件夹后,初始化 go.mod 文件

//初始化
go mod init gin
复制代码

下载安装Gin

//下载
go get -u github.com/gin-gonic/gin
复制代码

tips:踩坑指南

go get 命令下载gin包时出现报错

go在1.13版本后,默认开启了:

GOSUMDB=sum.golang.org

而这个网址sum.golang.org 在国内是无法访问,故需要关闭

解决方案:

go env -w GOSUMDB=off

更换国内源

go env -w GO111MODULE=on

go env -w GOPROXY=mirrors.aliyun.com/goproxy/,di…

首先,使用Gin输出一个 Ready?Go!

新建文件

在文件夹中新建 main.go 文件

导入Gin

import "github.com/gin-gonic/gin"
复制代码

如果使用诸如 http.StatusOK 之类的常量,则需要引入 net/http 包

import "net/http"
复制代码

官网的demo

package main

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

func main() {
   r := gin.Default()
   r.GET("/ping", func(c *gin.Context) {
      c.JSON(200, gin.H{
         "message": "pong",
      })
   })
   r.Run() // 监听并在 0.0.0.0:8080 上启动服务
}
复制代码

自己的代码

简单分析一下,每一步做了什么

package main

import (
"github.com/gin-gonic/gin"
"net/http"
)
func main() {
        // 创建服务,Default返回一个默认的路由引擎
        ginServer := gin.Default()
        // GET 方法, 添加路由地址和回调函数
        // Gin进行了封装,把request和response都封装到了gin.Context的上下文环境中。
        ginServer.GET("/", func(context *gin.Context) {
        context.String(http.StatusOK, "Ready?Go!")
    })
    // 服务器端口 如果不传端口号,默认8080
    ginServer.Run(":8082")
}
复制代码

运行项目,通过命令启动,或者直接在IDE开发工具中启动。

go run main.go
复制代码

浏览器访问地址:

http://localhost:8082/

成功输出:Ready?Go!

看一下上面的代码,回调函数中的 gin.Context

除了返回 Json 和 String 当然还可以返回 HTML页面。

🚴 加载静态资源和页面

响应一个前端页面

// 响应一个前端页面
ginServer.GET("/index", func(context *gin.Context) {
    context.HTML(http.StatusOK, "index.html", gin.H{"title": "gin web页面"})
})
复制代码

使用 ico 文件

安装命令

go get "github.com/thinkerou/favicon"
复制代码
// 使用 favicon.ico 文件
ginServer.Use(favicon.New("./favicon.ico"))
复制代码

加载静态页面

// 加载静态页面
ginServer.LoadHTMLGlob("templates/*")
复制代码

加载资源文件

// 加载资源文件
ginServer.Static("/static", "./static")

作者:OrzR3
链接:juejin.cn/post/716687…
来源:稀土掘金
著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。