【gin】新建一个基于gin框架的项目

一.创建项目文件夹&项目初始化
mkdir go-example
cd go-example
go env -w GO111MODULE=on
go env -w GOPROXY=https://goproxy.cn,direct
  • mkdir go-example && cd go-example创建项目文件夹并进入
  • go env -w GO111MODULE=on设置go的环境变量GO111MODULE=on,打开 Go modules 开关
  • go env -w GOPROXY=https://goproxy.cn,direct设置 GOPROXY 代理, https://goproxy.cn,国内的 Go 模块代理;direct,用于指示 Go 在拉取模块时遇到错误会回源到模块版本的源地址去抓取(比如 GitHub 等)。
  • go mod init go-example初始化 Go modules,它将会生成 《go.mod》 文件,go-example是modules的引入路径。

《go.mod》

module go-example

go 1.15
二.拉取gin
$ go get -u github.com/gin-gonic/gin
go: github.com/gin-gonic/gin upgrade => v1.6.3
go: gopkg.in/yaml.v2 upgrade => v2.4.0
go: github.com/golang/protobuf upgrade => v1.4.3
go: golang.org/x/sys upgrade => v0.0.0-20210113131315-ba0562f347e0
go: github.com/leodido/go-urn upgrade => v1.2.1
go: github.com/modern-go/reflect2 upgrade => v1.0.1
go: github.com/ugorji/go/codec upgrade => v1.2.3
go: github.com/modern-go/concurrent upgrade => v0.0.0-20180306012644-bacd9c7ef1dd
go: github.com/json-iterator/go upgrade => v1.1.10
go: github.com/go-playground/validator/v10 upgrade => v10.4.1
go: downloading golang.org/x/sys v0.0.0-20210113131315-ba0562f347e0
go: downloading github.com/ugorji/go v1.2.3
go: downloading github.com/ugorji/go/codec v1.2.3
go: google.golang.org/protobuf upgrade => v1.25.0
go: golang.org/x/crypto upgrade => v0.0.0-20201221181555-eec23a3978ad

完成后项目下多了个新文件《go.sum》,文件详细罗列了当前项目直接或间接依赖的所有模块版本,并写明了那些模块版本的 SHA-256 哈希值以备 Go 在今后的操作中保证项目所依赖的那些模块版本不会被篡改。

cloud.google.com/go v0.26.0/go.mod h1:aQUYkXzVsufM+DwF1aE+0xfcU+56JwCaLick0ClmMTw=
github.com/BurntSushi/toml v0.3.1/go.mod h1:xHWCNGjB5oqiDr8zfno3MHue2Ht5sIBksp03qcyfWMU=
github.com/census-instrumentation/opencensus-proto v0.2.1/go.mod h1:f6KPmirojxKA12rnyqOA5BBL4O983OfeGPqjHWSTneU=
...

《go.mod》文件也相应的发生了变化

module go-example

go 1.15

require (
        github.com/gin-gonic/gin v1.6.3 // indirect
        github.com/go-playground/validator/v10 v10.4.1 // indirect
        github.com/golang/protobuf v1.4.3 // indirect
        github.com/json-iterator/go v1.1.10 // indirect
        github.com/leodido/go-urn v1.2.1 // indirect
        github.com/modern-go/concurrent v0.0.0-20180306012644-bacd9c7ef1dd // indirect
        github.com/modern-go/reflect2 v1.0.1 // indirect
        github.com/ugorji/go v1.2.3 // indirect
        golang.org/x/crypto v0.0.0-20201221181555-eec23a3978ad // indirect
        golang.org/x/sys v0.0.0-20210113131315-ba0562f347e0 // indirect
        google.golang.org/protobuf v1.25.0 // indirect
        gopkg.in/yaml.v2 v2.4.0 // indirect
)

《go.mod》 文件是启用了 Go modules 的项目所必须的最重要的文件,描述了当前项目的元信息,每一行都以一个动词开头,目前有以下 5 个动词:

  • module:用于定义当前项目的模块路径。
  • go:用于设置预期的 Go 版本。
  • require:用于设置一个特定的模块版本。
  • exclude:用于从使用中排除一个特定的模块版本。
  • replace:用于将一个模块版本替换为另外一个模块版本。

indirect 的意思是传递依赖,也就是非直接依赖。

三.启动web服务
  • 编写一个hello.go文件
package main

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

func main() {
    r:= gin.Default()
    r.GET("/hello", func(c *gin.Context) {
        c.JSON(200,gin.H{"msg":"Hello Go"})
    })
    r.Run()
}
  • 启动go run hello.go
$ go run hello.go
[GIN-debug] GET    /hello                    --> 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
  • 用浏览器访问 http://127.0.0.1:8080/hello

  • 至此一个简单的gin web服务器就搭建完成了

《go.mod》里的 github.com/gin-gonic/gin默认是indirect模式,而实际上是直接引用的,在应用根目录下执行$ go mod tidy命令,整理现有依赖,整理完成后面的//indirect就没有了。

require (
    github.com/gin-gonic/gin v1.6.3
    github.com/go-playground/validator/v10 v10.4.1 // indirect
    ...
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容