hincky的主页 hincky的主页
  • 学习笔记

    • Vue笔记
    • Vuepress
    • nginx
  • 语言类

    • java
    • go
    • python
    • 设计模式
  • 框架类

    • Spring
    • Spring Security
    • Mybatis
  • 容器技术

    • docker
    • k8s
    • helm
    • prometheus
    • grafana
    • jenkins
  • 命令集合

    • linux命令
    • docker命令
    • git命令
    • vim命令
    • k8s命令
  • 数据库

    • sql
    • mysql
  • 协议

    • 网络模型
    • http/1.1
    • WebSocket
    • http/2
    • TLS/SSL
    • tcp
    • IP
    • tcpdump抓包命令
    • wireshark抓包工具
  • 通用

    • Git
  • 技术分享

    • git push/pull总是超时怎么办
    • idea debug技巧
    • postman使用
    • 问题总结
    • idea使用技巧
  • Oauth2

    • Oauth2原理
  • 项目列表

    • redis项目
    • 微服务项目
  • 分类
  • 标签
  • 归档
  • 随笔
GitHub (opens new window)

Hincky

当有趣的人,做想做的事
  • 学习笔记

    • Vue笔记
    • Vuepress
    • nginx
  • 语言类

    • java
    • go
    • python
    • 设计模式
  • 框架类

    • Spring
    • Spring Security
    • Mybatis
  • 容器技术

    • docker
    • k8s
    • helm
    • prometheus
    • grafana
    • jenkins
  • 命令集合

    • linux命令
    • docker命令
    • git命令
    • vim命令
    • k8s命令
  • 数据库

    • sql
    • mysql
  • 协议

    • 网络模型
    • http/1.1
    • WebSocket
    • http/2
    • TLS/SSL
    • tcp
    • IP
    • tcpdump抓包命令
    • wireshark抓包工具
  • 通用

    • Git
  • 技术分享

    • git push/pull总是超时怎么办
    • idea debug技巧
    • postman使用
    • 问题总结
    • idea使用技巧
  • Oauth2

    • Oauth2原理
  • 项目列表

    • redis项目
    • 微服务项目
  • 分类
  • 标签
  • 归档
  • 随笔
GitHub (opens new window)
  • java

  • python

  • Spring

  • SpringMVC

  • SpringSecurity

  • Mybatis

  • 设计模式

  • Go

    • 基础语法

    • Gin框架

    • Go gRPC

    • go-gin-api [文档]

      • 使用 go modules 初始化项目
        • 概述
        • 初始化
        • 添加依赖包
        • go mod 命令
        • 小结
        • 源码地址
      • 规划项目目录和参数验证
        • 概述
        • 规划目录结构
        • 模型绑定和验证
        • 自定义验证器
        • 制定 API 返回结构
        • 源码地址
        • go-gin-api 系列文章
        • 备注
      • 路由中间件 - 日志记录
        • 概述
        • gin.Logger()
        • 自定义 Logger()
        • 源码地址
        • go-gin-api 系列文章
      • 路由中间件 - 捕获异常
        • 概述
        • 什么是异常?
        • 怎么捕获异常?
        • 封装发邮件方法
        • 自定义邮件模板
        • 封装一个中间件
        • 备注
        • 源码地址
        • go-gin-api 系列文章
      • 路由中间件 - 链路追踪(Jaeger)
        • 概述
        • 如何设计日志记录?
        • 开源工具
        • Jaeger 架构图
        • Jaeger Span
        • Jaeger 部署
        • Jaeger 端口
        • Jaeger 采样率
        • Jaeger 缺点
        • 实战
        • 源码地址
        • go-gin-api 系列文章
      • 路由中间件 - 链路追踪(Jaeger)实战
        • 概述
        • Jaeger 部署
        • 准备测试服务
          • 听(listen)
          • 说(speak)
          • 读(read)
          • 写(write)
          • 唱(sing)
        • 应用示例
          • 实例化 Tracer
          • HTTP 注入
          • HTTP 拦截
          • gRPC 注入
          • gRPC 拦截
        • 运行
          • 启动服务
          • 访问路由
        • 效果
        • API 源码地址
        • Service 源码地址
        • go-gin-api 系列文章
      • 路由中间件 - 签名验证
        • 概览
        • MD5 组合
          • 生成签名
          • 验证签名
          • 中间件 - 代码实现
        • AES 对称加密
          • 生成签名
          • 验证签名
          • 中间件 - 代码实现
        • RSA 非对称加密
          • 创建签名
          • 验证签名
          • 中间件 - 代码实现
        • 如何调用?
        • 性能测试
          • MD5
          • AES
          • RSA
        • PHP 与 Go 加密方法如何互通?
        • 源码地址
        • go-gin-api 系列文章
    • go基本介绍
      • 安装go
      • hello world
      • 变量类型
      • 变量和声明
        • 定义和赋值分开
        • 定义和赋值合并
        • 最简单的写法
        • 最简写法结合函数
        • 多个变量同时赋值
        • 变量总结
      • if
      • 导入包
      • 运行go代码
      • 函数声明
        • 返回值个数
        • 参数接收
        • 两个参数都接收
        • 只接收其中一个参数
    • Go结构体
      • 定义结构体
      • 声明和初始化
        • 结构体字段
        • 结构体初始化
        • 函数参数传递方式
        • 镜像复制
        • 指针
      • 结构体上的函数
      • 构造器
        • new
    • Go相关项目推荐
      • 收录golang的一些好的开源项目
  • 后端
  • Go
  • go-gin-api [文档]
hincky
2022-11-21
目录

使用 go modules 初始化项目

# 概述

我想实现一个开箱即用的 API 框架的轮子,这个轮子是基于 Gin 基础上开发的。

为什么是开箱即用,它会集成哪些功能?

以上功能点,都是常用的,后期可能还会增加。

废话不多说,咱们开始吧。

创建一个项目,咱们首先要考虑一个依赖包的管理工具。

常见的包管理有,dep、go vendor、glide、go modules 等。

最开始,使用过 dep,当时被朋友 diss 了,推荐我使用 go modules 。

现在来说一下 go modules ,这个是随着 Go 1.11 的发布和我们见面的,这是官方提倡的新的包管理。

说一个环境变量:GO111MODULE,默认值为 auto 。

当项目中有 go.mod 时,使用 go modules 管理,反之使用 旧的 GOPATH 和 vendor机制。

如果就想使用 go modules ,可以将 GO111MODULE 设置为 on 。

直接上手吧。

# 初始化

咱们在 GOPATH 之外的地方,新建一个空文件夹 go-gin-api 。

cd go-gin-api && go mod init go-gin-api
1

输出:

go: creating new go.mod: module go-gin-api

这时目录中多一个 go.mod 文件,内容如下:

module go-gin-api

go 1.12
1
2
3

到这,go mod 初始化就完成,接下来添加依赖包 - gin。

# 添加依赖包

在目录中创建一个 main.go 的文件,放上如下代码:

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() // listen and serve on 0.0.0.0:8080
}
1
2
3
4
5
6
7
8
9
10
11
12
13

这代码没什么特别的,就是官方的入门Demo。

接下来,开始下载依赖包。

go mod tidy
1

执行完成后,看一下 go.mod 文件:

module go-gin-api

go 1.12

require github.com/gin-gonic/gin v1.4.0
1
2
3
4
5

这时,看到新增一个 gin v1.4.0 的包。

还生成了一个 go.sum 的文件,这个文件可以暂时先不管。

这时发现了 2 个问题。

1、目录中没发现 gin 包,包下载到哪了?

下载到了 GOPATH/pkg/mod 目录中。

2、GoLand 编辑器中关于 Gin 的引用变红了?

在这里编辑器需要设置一下,如图:

点击 Apply 和 OK 即可。

如果这招不灵,还可以执行:

go mod vendor
1

这个命令是将项目依赖的包,放到项目的 vendor 目录中,这肯定就可以了。

# go mod 命令

go mod tidy

拉取缺少的模块,移除不用的模块。

我常用这个命令。

go mod vendor

将依赖复制到vendor下。

我常用这个命令。

go mod download

下载依赖包。

go mod verify

检验依赖。

go mod graph

打印模块依赖图。

其他命令,可以执行 go mod ,查看即可。

# 小结

这篇文章,分享了 go modules 的使用。

  • 使用 go modules 从零搭建一个项目。
  • GoLand 编辑器使用 go modules。

今天就到这了,下一篇文章开始搭建 API 项目了,写参数验证。

# 源码地址

https://github.com/xinliangnote/go-gin-api

编辑 (opens new window)
Go gRPC 调试工具
规划项目目录和参数验证

← Go gRPC 调试工具 规划项目目录和参数验证→

最近更新
01
人生前期重要的能力
05-17
02
防火墙命令
04-11
03
docker-compose部署mysql主从集群
03-22
更多文章>
Theme by Vdoing | Copyright © 2022-2023 Hincky | MIT License | 粤ICP备2022120427号
  • 跟随系统
  • 浅色模式
  • 深色模式
  • 阅读模式