Gin项目的初始化步骤和常见错误记录

news2024/12/24 10:09:35

相信很多人对Go的环境安装和Gin项目的初始化都已经手拿把攥很是熟练了,本节介绍一个自己新建Go项目时非常好用的设置以及记录一下Gin项目的初始化过程和常能遇到的错误。

一个容易忽略的Go ENV

在安装了Go的电脑中,我们可以在命令行执行 go env 命令,查看当前的 go 环境变量:

GO111MODULE=""
GOARCH="amd64"

GOPATH="/usrs/local/go"
GOROOT="/usr/local/go"
....

接下来,我说一个容易忽略的Go环境变量,它就是 GOPATH 。

虽然有了 Go Modules 后,可以把Go 项目放在任何地方,但我还是习惯把它们统一放在一个专门的目录里,比如/Users/xxx/Code/Go 里,所以在这里执行下面的命令把 GOPATH 设置成 /Users/xxx/Code/Go

go env -w GOPATH="/Users/xxx/Code/Go"

这样做有一个好处,就是你在开发中使用 go get 安装的都会自动统一放到 $GOPATH/pkg 目录中,即与Go相关的所有资源包和项目都能收拢在 /Users/xxx/Code/Go 这个目录中,这样的话会让你自己的电脑的目录管理更整洁一些,不至于未来找东西都不知道去哪里找。

除了这里提到的收益外,这么安排目录和GOPATH在我们新建项目时也会更便捷,具体大家可以往下面接着看。

Gin项目的初始化

首先如果你跟着专栏学习,我推荐你在Github 上创建个项目跟着一步步做,复现专栏中的开发过程,这样学习效果会更好一些。

专栏订阅可以扫码或者复制链接在浏览器中打开:https://xiaobot.net/p/golang  进行阅读和订阅。‍‍‍

ece62f8af37a1160fe08186e56606af0.png

初始化项目

你可以像下图这样自己创建一个项目名叫go-mall的私有项目

eda5bbe5f83d8bf0e2b654671b4bc2ad.jpeg

在GitHub上创建好项目后,我们先在命令行终端中把当前目录切换到刚才约定的GOPATH目录中,如果此时你的GOPATH目录是个空目录,那么按照咱们上一部分目录结构与项目名的约定,你需要先创建下面这些目录

  • src目录,未来Go项目源码都在此目录

    • src 下创建组织机构的目录,这里我们是在github上创建的项目,所以就在此创建一个github.com的目录。

    • 这里多说一句,一般公司里都有自己的Git站点,如果要存在你公司里的项目就先在这里一个code.xxxx.com之类的目录,这个目录名与项目的组织前缀保持一致。

  • 切换到 src/githun.com 目录

    • 按照项目名称,创建一个go-study-lab的目录,这个用来存放专栏中我提供给大家让大家学习参考的项目

    • 如果你自己创建了新项目跟着做,这里记得创建一个你的Git用户名的目录 {$yourgitname}

  • 拉取项目

    • cd /Users/xxx/CodeBase/Go/src/github.com/go-study-lab

    • git clone git@github.com:go-study-lab/go-mall.git

    • 拉取自己的Git项目请按照相同步骤切换到自己的 {$yourgitname} 目录后进行操作。

  • 初始化Go 项目

go mod init,Go Module会自己检索目录结构,在go.mod中声明好项目的module名称

50be8c0b1e47ede2b943d2f1d648878e.jpeg

如果不是按照咱们上面这么安排的目录,比如就想把项目放在桌面,那初始化命令执行时需要指定好 module name

  • go mod init github.com/go-study-lab/go-mall

注意以上步骤,包括在项目中安装Gin,都是在你自己的项目中操作的,咱们专栏提供的项目大家下载下来,打开就能用,不需要再重复上面的操作。

安装Gin

安装Gin,我们直接在命令行终端中切换到项目所在的目录然后使用go get 下载安装Gin

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

上面这样安装的是Gin的最新可用版本,如果你想安装指定版本,像下面这样添加版本参数

go get github.com/gin-gonic/gin@v1.7.0
2592c9a3ee18c754cfdd0d0c2de5447c.jpeg

安装完成后我们用 Gin 官网的例子,写个start程序,先测试一下安装效果。

package main
import (
 "net/http"
 "github.com/gin-gonic/gin"
)
func main() {
 r := gin.Default()
 r.GET("/ping", func(c *gin.Context) {
  c.JSON(http.StatusOK, gin.H{
   "message": "pong",
  })
 })
 r.Run() // listen and serve on 0.0.0.0:8080 (for windows "localhost:8080")
}

如果是在Mac上执行后有可能会报错

# golang.org/x/sys/unix
../../../../pkg/mod/golang.org/x/sys@v0.0.0-20200116001909-b77594299b42/unix/syscall_darwin.1_13.go:25:3: //go:linkname must refer to declared function or variable
../../../../pkg/mod/golang.org/x/sys@v0.0.0-20200116001909-b77594299b42/unix/zsyscall_darwin_amd64.1_13.go:27:3: //go:linkname must refer to declared function or variable
../../../../pkg/mod/golang.org/x/sys@v0.0.0-20200116001909-b77594299b42/unix/zsyscall_darwin_amd64.1_13.go:40:3: //go:linkname must refer to declared function or variable
../../../../pkg/mod/golang.org/x/sys@v0.0.0-20200116001909-b77594299b42/unix/zsyscall_darwin_amd64.go:28:3: //go:linkname must refer to declared function or variable
../../../../pkg/mod/golang.org/x/sys@v0.0.0-20200116001909-b77594299b42/unix/zsyscall_darwin_amd64.go:43:3: //go:linkname must refer to declared function or variable
../../../../pkg/mod/golang.org/x/sys@v0.0.0-20200116001909-b77594299b42/unix/zsyscall_darwin_amd64.go:59:3: //go:linkname must refer to declared function or variable
../../../../pkg/mod/golang.org/x/sys@v0.0.0-20200116001909-b77594299b42/unix/zsyscall_darwin_amd64.go:75:3: //go:linkname must refer to declared function or variable
../../../../pkg/mod/golang.org/x/sys@v0.0.0-20200116001909-b77594299b42/unix/zsyscall_darwin_amd64.go:90:3: //go:linkname must refer to declared function or variable
../../../../pkg/mod/golang.org/x/sys@v0.0.0-20200116001909-b77594299b42/unix/zsyscall_darwin_amd64.go:105:3: //go:linkname must refer to declared function or variable
../../../../pkg/mod/golang.org/x/sys@v0.0.0-20200116001909-b77594299b42/unix/zsyscall_darwin_amd64.go:121:3: //go:linkname must refer to declared function or variable
../../../../pkg/mod/golang.org/x/sys@v0.0.0-20200116001909-b77594299b42/unix/zsyscall_darwin_amd64.go:121:3: too many errors

这是因为项目使用了老版本的 golang.org/x/sys包导致的。

需要我们更新一下电脑本地依赖库中这个包的版本。

执行命令:

go get -u golang.org/x/sys

执行命令后终端会显示类似下面的更新过程:

go: downloading golang.org/x/sys v0.20.0
go: upgraded golang.org/x/sys v0.0.0-20200116001909-b77594299b42 => v0.20.0

关于Gin项目初始化过程中还会遇到哪些错误,Windows上的一些错误怎么解决,欢迎订阅专栏,加入我们的项目,项目中会通过Github Issue来记录和解答项目开发过程中大家提的各种问题,也有专属的读者群,欢迎加入一起学习

项目是用Go语言从零开始搭建项目和做需求开发的实战项目,使用的技术栈均为实际开发所常用的组件和框架如:Gin、Viper、Zap、GORM、go-redis 、lo 等等。

课程分为五大部分:

6677953ee102afa0eb0e9fddfadc05c9.png

  • 第一部分介绍让框架变得好用的诸多实战技巧,比如通过自定义日志门面让项目日志更简单易用、支持自动记录请求的追踪信息和程序位置信息、通过自定义Error在实现Go error接口的同时支持给给错误添加错误链,方便追溯错误源头。

  • 第二部分:讲解项目分层架构的设计和划分业务模块的方法和标准,让你以后无论遇到什么项目都能按这套标准自己划分出模块和逻辑分层。后面几个部分均是该部分所讲内容的实践。

  • 第三部分:设计实现一个套支持多平台登录,Token泄露检测、同平台多设备登录互踢功能的用户认证体系,这套用户认证体系既可以在你未来开发产品时直接应用

  • 第四部分:商城app C端接口功能的实现,强化分层架构实现的讲解,这里还会讲解用责任链、策略和模版等设计模式去解决订单结算促销、支付方式支付场景等多种多样的实际问题。

  • 第五部分:单元测试、项目Docker镜像、K8s部署和服务保障相关的一些基础内容和注意事项

具体的章节可扫码下方的海报二维码或者访问 https://xiaobot.net/p/golang

15a016c55b1aee6b174e49d15adc35e5.png

点击下方阅读原文即可跳转。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/2210211.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

泛谈阿里vs美团订单存储架构演进

泛谈阿里vs美团订单存储架构演进 1. 订单存储介绍 订单的存储背后支撑创单后的系列用户活动,围绕着业务的发展,大厂的订单的数据日益剧增 在手淘订单列表,我们可以看见天猫、飞猪、淘票票等诸多 BU 的订单 在美团的订单列表,我…

[Python学习日记-46] Python 中第三方开源模块的安装、使用与上传自己写的模块

[Python学习日记-46] Python 中第三方开源模块的安装、使用与上传自己写的模块 简介 下载与安装 如何使用安装好的第三方开源模块 如何上传自己写的模块到 PyPi 简介 在前面的模块介绍和导入当中主要介绍的都是 Python 内置的一些模块,我们把它称为标准库&#…

string模拟优化和vector使用

1.简单介绍编码 utf_8变长编码,常用英文字母使用1个字节,对于其它语言可能2到14,大部分编码是utf_8,char_16是编码为utf_16, char_32是编码为utf_32, wchar_t是宽字符的, utf_16是大小为俩个字节&a…

在线书画展:艺术与科技携手,拓宽艺术之路

在数字化浪潮的推动下,在线书画展正成为艺术与科技完美融合的典范。它不仅拓宽了艺术的传播渠道,提升了个人书画家的开展效率,还促进了艺术家们的职业发展。以下是对在线书画展几大优势的深入探讨。 一、拓宽艺术传播渠道 全球化展示&#x…

前端开发笔记--html 黑马程序员2

文章目录 前端常用标签一、标题标签二、段落标签和换行标签和水平线标签三、文本格式化标签![请添加图片描述](https://i-blog.csdnimg.cn/direct/87583fa23fe04229b016912051f3fc45.png)四、盒子标签五、图像标签六、连接标签七、注释和特殊字符 八、表格标签的基本使用九、列…

图书馆自习室座位预约管理微信小程序+ssm(lw+演示+源码+运行)

摘 要 随着电子商务快速发展世界各地区,各个高校对图书馆也起来越重视.图书馆代表着一间学校或者地区的文化标志,因为图书馆丰富的图书资源能够带给我们重要的信息资源,图书馆管理系统是学校管理机制重要的一环,,面对这一世界性的新动向和新…

Python | Leetcode Python题解之第475题供暖器

题目&#xff1a; 题解&#xff1a; class Solution:def findRadius(self, houses: List[int], heaters: List[int]) -> int:ans 0houses.sort()heaters.sort()j 0for i, house in enumerate(houses):curDistance abs(house - heaters[j])while j 1 < len(heaters) …

计算机网络——运输层(可靠传输、超时重传、选择确认、流量控制和拥塞控制、TCP连接和释放)

TCP可靠传输的实现 我们假定数据传输只在一个方向进行&#xff0c;即A发送数据&#xff0c;B给出确认。这样的好处是使讨论限于两个窗口&#xff0c;即发送方A的发送窗口和接收方B的接收窗口。 以字节为单位滑动窗口 发送方构造窗口 窗口前沿和后沿的移动情况 描述发送窗口的状…

《使用Gin框架构建分布式应用》阅读笔记:p1-p19

《使用Gin框架构建分布式应用》学习第1天&#xff0c;p1-p19总结&#xff0c;总计19页。 一、技术总结 1.go get & go install 执行go get 或者 go install 命令后package会被安装到哪里&#xff1f;参考&#xff1a;https://go.dev/ref/mod#go-install VSCode结合WSL使…

springboot001基于SpringBoot的在线拍卖系统(论文+源码)_kaic

医护人员排班系统 摘要 随着信息技术在管理上越来越深入而广泛的应用&#xff0c;管理信息系统的实施在技术上已逐步成熟。本文介绍了医护人员排班系统的开发全过程。通过分析医护人员排班系统管理的不足&#xff0c;创建了一个计算机管理医护人员排班系统的方案。文章介绍了医…

C++多线程的Demo(二)

前言 接上文&#xff0c;这次对C多线程和并发有了一些粗浅的理解&#xff0c;上一篇文章如下&#xff1a; C多线程的Demo&#xff08;一&#xff09;_c demo-CSDN博客 详细讲解join()和detach(): 每一个程序至少拥有一个线程&#xff0c;那就是执行main()函数的主线程&#xf…

python 画图|三维散点图输出

【1】引言 在前述学习进程中&#xff0c;已经初步掌握三维动画输出和散点图动画输出基本技能&#xff0c;可通过下述链接直达&#xff1a; python画图|散点图动态输出-CSDN博客 python动画教程|Animations using Matplotlib-官网教程程序解读_如何用python制作微动画-CSDN博…

【实时计算 Flink】DataStream作业大状态导致反压的调优原理与方法

状态管理不仅影响应用的性能&#xff0c;还关系到系统的稳定性和资源的有效利用。如果状态管理不当&#xff0c;可能会导致性能下降、资源耗尽&#xff0c;甚至系统崩溃。Flink Datastream API在状态管理方面提供了非常灵活的接口&#xff0c;您可以采取相关措施来确保状态大小…

Word粘贴时出现“文件未找到:MathPage.WLL”的解决方案

解决方案 一、首先确定自己电脑的位数&#xff08;这里默认大家的电脑都是64位&#xff09;二、右击MathType桌面图标&#xff0c;点击“打开文件所在位置”&#xff0c;然后分别找到MathPage.WLL三、把这个文件复制到该目录下&#xff1a;C:\Program Files\Microsoft Office\r…

Ubuntu 详解| Ubuntu ssh| Ubuntu apt命令大全| Ubuntu性能优化| Ubuntu换镜像源

Ubuntu 是Debian开源linux系统体系下的子分支之一 Debian-ubuntu 和它一样的还有 kali&#xff08;一款渗透测试软件&#xff09; Debian-kali 小白参考 &#xff1a;Centos 7.9 安装 图解版 小白必看 最新_centos7.9-CSDN博客文章浏览阅读2.5k次&#xff0c;点赞…

vue3.0 + vite:中使用 sass

1、安装依赖 npm i sass sass-loader --save-dev 在项目的src/assets文件夹下新建style/index.scss 文件 2、在 vite.config.ts 中加&#xff1a; resolve: {alias: {: fileURLToPath(new URL(./src, import.meta.url))} }, css: {// 配置 SCSS 支持preprocessorOptions: {s…

Mybatis Plus连接使用ClickHouse也如此简单

通过阅读列式数据库ClickHouse官网&#xff0c;不难看出它有支持JDBC规范的驱动jar包&#xff0c;可以直接集成到Object Relational Mapping框架等&#xff0c;下面我用SpringBootMybatisPlus环境连接ClickHouse来演示一下 集成步骤 1.Maven引入ClickHouse提供的JDBC依赖 <…

解决海外社媒风控问题的工具——云手机

随着中国企业逐步进入海外市场&#xff0c;海外社交媒体的风控问题严重影响了企业的推广效果与账号运营。这种背景下&#xff0c;云手机作为一种新型技术解决方案&#xff0c;正日益成为企业应对海外社媒风控的重要工具。 由于海外社媒的严格监控&#xff0c;企业经常面临账号流…

linux驱动-platform子系统

目录 1.传统字符设备驱动框架的缺点 2.总线、设备、驱动 3.设备注册 4.驱动注册 1.传统字符设备驱动框架的缺点 缺点&#xff1a;驱动可移植性差&#xff0c;原因是驱动里面包括了很多该芯片特有的消息&#xff0c;如果是其他平台&#xff0c;硬件信息会有差异&#xff0c;…

七、Linux 之用户管理

基本介绍 Linux 系统是一个多用户多任务的操作系统&#xff0c;任何一个要使用系统资源的用户&#xff0c;都必须首先向系统管理员申请一个账号&#xff0c;然后以这个账号的身份进入系统 添加用户 useradd 用户名添加一个用户 milan, 默认该用户的家目录在 /home/milan 细节说…