gin框架

gin简介

gin是用Go语言写的后端web框架,简洁、轻量、支持高并发,
官方网站:https://gin-gonic.github.io/gin/
Github地址:https://github.com/gin-gonic/gin

下载

go get -u github.com/gin-gonic/gin

源码结构如下

sszxr:gin sszxr$ pwd
/Users/sszxr/go/src/github.com/gin-gonic/gin
sszxr:gin sszxr$ tree
.
├── AUTHORS.md
├── BENCHMARKS.md
├── CHANGELOG.md
├── CODE_OF_CONDUCT.md
├── CONTRIBUTING.md
├── LICENSE
├── Makefile
├── README.md
├── auth.go
├── auth_test.go
├── benchmarks_test.go
├── binding
│   ├── binding.go
│   ├── binding_body_test.go
│   ├── binding_test.go
│   ├── default_validator.go
│   ├── form.go
│   ├── form_mapping.go
│   ├── json.go
│   ├── msgpack.go
│   ├── protobuf.go
│   ├── query.go
│   ├── uri.go
│   ├── validate_test.go
│   ├── xml.go
│   └── yaml.go
├── codecov.yml
├── context.go
├── context_17.go
├── context_17_test.go
├── context_appengine.go
├── context_pre17.go
├── context_test.go
├── debug.go
├── debug_test.go
├── deprecated.go
├── deprecated_test.go
├── doc.go
├── docs
│   └── how-to-build-an-effective-middleware.md
├── errors.go
├── errors_test.go
├── examples
│   ├── app-engine
│   │   ├── README.md
│   │   ├── app.yaml
│   │   └── hello.go
│   ├── assets-in-binary
│   │   ├── README.md
│   │   ├── assets.go
│   │   ├── html
│   │   │   ├── bar.tmpl
│   │   │   └── index.tmpl
│   │   └── main.go
│   ├── auto-tls
│   │   ├── example1
│   │   │   └── main.go
│   │   └── example2
│   │       └── main.go
│   ├── basic
│   │   ├── main.go
│   │   └── main_test.go
│   ├── custom-validation
│   │   └── server.go
│   ├── favicon
│   │   ├── favicon.ico
│   │   └── main.go
│   ├── graceful-shutdown
│   │   ├── close
│   │   │   └── server.go
│   │   └── graceful-shutdown
│   │       └── server.go
│   ├── grpc
│   │   ├── README.md
│   │   ├── gin
│   │   │   └── main.go
│   │   ├── grpc
│   │   │   └── server.go
│   │   └── pb
│   │       ├── helloworld.pb.go
│   │       └── helloworld.proto
│   ├── http-pusher
│   │   ├── assets
│   │   │   └── app.js
│   │   ├── main.go
│   │   └── testdata
│   │       ├── ca.pem
│   │       ├── server.key
│   │       └── server.pem
│   ├── http2
│   │   ├── README.md
│   │   ├── main.go
│   │   └── testdata
│   │       ├── ca.pem
│   │       ├── server.key
│   │       └── server.pem
│   ├── multiple-service
│   │   └── main.go
│   ├── realtime-advanced
│   │   ├── Makefile
│   │   ├── main.go
│   │   ├── resources
│   │   │   ├── room_login.templ.html
│   │   │   └── static
│   │   │       ├── epoch.min.css
│   │   │       ├── epoch.min.js
│   │   │       ├── prismjs.min.css
│   │   │       ├── prismjs.min.js
│   │   │       └── realtime.js
│   │   ├── rooms.go
│   │   ├── routes.go
│   │   └── stats.go
│   ├── realtime-chat
│   │   ├── Makefile
│   │   ├── main.go
│   │   ├── rooms.go
│   │   └── template.go
│   ├── struct-lvl-validations
│   │   ├── README.md
│   │   └── server.go
│   ├── template
│   │   └── main.go
│   └── upload-file
│       ├── multiple
│       │   ├── main.go
│       │   └── public
│       │       └── index.html
│       └── single
│           ├── main.go
│           └── public
│               └── index.html
├── fs.go
├── gin.go
├── ginS
│   ├── README.md
│   └── gins.go
├── gin_integration_test.go
├── gin_test.go
├── githubapi_test.go
├── go.mod
├── go.sum
├── internal
│   └── json
│       ├── json.go
│       └── jsoniter.go
├── logger.go
├── logger_test.go
├── middleware_test.go
├── mode.go
├── mode_test.go
├── path.go
├── path_test.go
├── recovery.go
├── recovery_test.go
├── render
│   ├── data.go
│   ├── html.go
│   ├── json.go
│   ├── json_17.go
│   ├── msgpack.go
│   ├── protobuf.go
│   ├── reader.go
│   ├── redirect.go
│   ├── render.go
│   ├── render_17_test.go
│   ├── render_test.go
│   ├── text.go
│   ├── xml.go
│   └── yaml.go
├── response_writer.go
├── response_writer_1.7.go
├── response_writer_1.8.go
├── response_writer_test.go
├── routergroup.go
├── routergroup_test.go
├── routes_test.go
├── test_helpers.go
├── testdata
│   ├── certificate
│   │   ├── cert.pem
│   │   └── key.pem
│   ├── protoexample
│   │   ├── test.pb.go
│   │   └── test.proto
│   └── template
│       ├── hello.tmpl
│       └── raw.tmpl
├── tools.go
├── tree.go
├── tree_test.go
├── utils.go
├── utils_test.go
├── vendor
│   └── vendor.json
└── version.go

45 directories, 150 files
sszxr:gin sszxr$ find . -name '*.go' | wc -l
     104
sszxr:gin sszxr$ 

源码并不多,总共104个go文件,主要代码在【gin.gocontext.go】这两个go文件中,所以阅读源码首先从这两个go文件入手。
示例用法在【examples】文件夹下,具体怎么用,可以看该文件夹下的用法示例。

三种模式

gin有三种模式,分别为:调试模式,发布模式,测试模式

const (
	// DebugMode indicates gin mode is debug.
	DebugMode = "debug"
	// ReleaseMode indicates gin mode is release.
	ReleaseMode = "release"
	// TestMode indicates gin mode is test.
	TestMode = "test"
)
const (
	debugCode = iota
	releaseCode
	testCode
)

默认是【debug】模式

package main

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

func main() {
	engine := gin.Default()
	engine.Run()
}

运行,可以看到,下面提示了debug模式,监听的端口,

[GIN-debug] [WARNING] Creating an Engine instance with the Logger and Recovery middleware already attached.

[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] Environment variable PORT is undefined. Using port :8080 by default
[GIN-debug] Listening and serving HTTP on :8080

两行代码,就注册好了一个web服务器,并启动了服务器,

engine := gin.Default()
engine.Run()

这里的Run()函数有一个参数,用来设置端口,如果不设置,那么默认是8080端口。
前面说了,默认是debug模式,那么如何修改模式呢,

package main

import (
	"fmt"
	"github.com/gin-gonic/gin"
)

func main() {
	//设置模式,设置模式要放在调用Default()函数之前
	gin.SetMode(gin.ReleaseMode)
	engine := gin.Default()
	//查看模式
	fmt.Println(gin.Mode())
	engine.Run()
}

注意,设置模式要放在注册路由gin.Default()之前,如果放在后面,虽然查看模式的时候,发现已经是release模式了,但是还是会打印一些debug信息,因为Default函数里面默认是debug模式,并且会打印一些debug信息,会显得混乱。

猜你喜欢

转载自blog.csdn.net/Charliewolf/article/details/85229116