前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >Golang语言 Gin框架环境配置、报错处理、接口调用、配置和日志管理|Go主题月

Golang语言 Gin框架环境配置、报错处理、接口调用、配置和日志管理|Go主题月

作者头像
微芒不朽
发布2022-09-13 10:02:49
7450
发布2022-09-13 10:02:49
举报

安装:

下载并安装

代码语言:javascript
复制
go get -u github.com/gin-gonic/gin

安装失败的话,直接打开 github.com/gin-gonic/gin,下载压缩包,并在GOPATH路径的src目录下面建立github.com,解压到这个目录下面;

遇到的报错信息:

Go 项目编译:cannot find package "." in:*******

将缺少依赖的包重新安装一次即可解决问题。

go: inconsistent vendoring in xxx报错

修改GOPAHT,改到非GOROOT路径。GOROOT是GO语言安装路径,GOPATH是GO语言编译环境所需路径,因此二者不能为同一路径

新建项目

GOPATH目录下面的src下面新建一个文件夹app,使用命令

代码语言:javascript
复制
go mod init

新建 main.go,写出我们的第一个程序

代码语言:javascript
复制
package main
import "github.com/gin-gonic/gin"

func main() {
 r := gin.Default()
 r.GET("/", func(c *gin.Context) {
  c.JSON(200, gin.H{
   "name": "叫我詹躲躲",
   "gend": "男",
  })
 })
 r.Run(":8080")
}

运行程序

代码语言:javascript
复制
go run main.go

浏览器运行:

生成JSON

代码语言:javascript
复制
func AsciiJSON() {
 r := gin.Default()
 r.GET("/", func(c *gin.Context) {
  c.JSON(200, gin.H{
   "name": "叫我詹躲躲",
   "gend": "男",
  })
 })
 r.Run(":8080")
}

调用

代码语言:javascript
复制
package main
import (
 "app/function"
 "github.com/gin-gonic/gin"
)

func main() {
 //使用AsciiJSON生成带有转义的非ASCII字符的纯ASCII JSON。
 function.AsciiJSON()
}

测试get请求

绑定表单数据请求与自定义结构

代码语言:javascript
复制
//绑定表单数据请求与自定义结构
type StructA struct {
 FieldA string `form:"field_a"`
}
type StructB struct {
 NestedStruct StructA
 FieldB       string `form:"field_b"`
}

//get请求
func GetFormData(c *gin.Context) {
 var b StructB
 c.Bind(&b)
 c.JSON(200, gin.H{
  "a": b.NestedStruct,
  "b": b.FieldB,
 })
}

调用

代码语言:javascript
复制
package main
import (
 "app/function"
 "github.com/gin-gonic/gin"
)

func main() {
 //将表单数据请求与自定义结构绑定
 r := gin.Default()
 //测试get请求
 r.GET("/getFormData", function.GetFormData)
 r.Run()
}

查询返回信息

代码语言:javascript
复制
//绑定查询字符串或发布数据
type PersonInfo struct {
 Name    string `form:"name"`
 Address string `form:"address"`
 Memo    string `form:"memo"`
}

//返回信息
func QueryInfo(c *gin.Context) {
 var person PersonInfo
 if c.ShouldBind(&person) == nil {
  log.Println(person.Name)
  log.Println(person.Address)
  log.Println(person.Memo)
 }
 c.String(200, "Success")
}

调用

代码语言:javascript
复制
package main
import (
 "app/function"
 "github.com/gin-gonic/gin"
)

func main() {
 r := gin.Default()
 //查询返回信息
 r.GET("/queryInfo", function.QueryInfo)
 r.Run()
}

自定义HTTP配置

代码语言:javascript
复制
http.ListenAndServe(":8080", router)
或者
代码语言:javascript
复制
s := &http.Server{
 Addr:           ":8080",
 Handler:        router,
 ReadTimeout:    10 * time.Second,
 WriteTimeout:   10 * time.Second,
 MaxHeaderBytes: 1 << 20,
}
s.ListenAndServe()

自定义日志文件

代码语言:javascript
复制
router := gin.New()
router.Use(gin.LoggerWithFormatter(func(param gin.LogFormatterParams) string {
 return fmt.Sprintf("%s - [%s] \"%s %s %s %d %s \"%s\" %s\"\n",
   param.ClientIP,
   param.TimeStamp.Format(time.RFC1123),
   param.Method,
   param.Path,
   param.Request.Proto,
   param.StatusCode,
   param.Latency,
   param.Request.UserAgent(),
   param.ErrorMessage,
 )
}))
router.Use(gin.Recovery())
router.GET("/ping", func(c *gin.Context) {
 c.String(200, "pong")
})
router.Run(":8080

参考文档

1.解决GO语言安装air框架时遇到go: inconsistent vendoring问题 2.Glide cannot find package “.” in 3.warning: GOPATH set to GOROOT (/usr/local/go) has no effect 4.gin官方文档 5.Gin框架中文文档6.Go 不同文件之间的引用

本文参与 腾讯云自媒体分享计划,分享自微信公众号。
原始发表:2021-03-30,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 叫我詹躲躲 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 安装:
  • 遇到的报错信息:
  • 新建项目
  • 生成JSON
  • 调用
  • 测试get请求
    • 调用
      • 查询返回信息
        • 调用
          • 自定义HTTP配置
            • 或者
        • 自定义日志文件
          • 参考文档
          领券
          问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档