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

相信很多人对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.rhkb.cn/news/445761.html

如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

04 什么是线性表

什么是线性表 一、为什么需要线性表 例如: ​ 在程序中保存指定班级的所有的学生信息(暂时只需要处理姓名、年龄),该班级最多可容纳30人,且可进行数量上的增减。 业务功能: ​ 1)这个项目中…

【Go】GO语言知识总结浅析

Go语言是一种现代化的编程语言,由Google于2007年设计并于2009年发布。它旨在使编程变得简单、高效,并且可以在多核处理器上轻松构建高性能应用。Go语言的编程思想、发展历史、版本特点、运行原理、数据类型、应用场景,以及在web开发、网络编程…

云轴科技ZStack入选信通院《高质量数字化转型产品及服务全景图》AI大模型图谱

近日,由中国互联网协会中小企业发展工作委员会主办的“2024大模型数字生态发展大会暨铸基计划年中会议”在北京成功召开。会上发布了中国信通院在大模型数字化等领域的多项工作成果,其中重点发布了《高质量数字化转型产品及服务全景图(2024上…

ESP32利用WebServer进行设备配置

目标需求 利用esp32的WebServer功能&#xff0c;展示一个网页&#xff0c;对里面的参数进行配置&#xff0c;并以json文本格式保存到flash里面。 1、定义HTML const char index_html[] PROGMEM R"rawliteral( <!DOCTYPE html> <html lang"en"> …

使用SpringMVC搭建WEB项目时报错404的问题排查解决以及web.xml配置文件init-param行标红问题

一、使用SpringMVC搭建WEB项目时报错404的问题排查解决 很早前&#xff08;4年前&#xff09;就把这个搭建过&#xff0c;但今天运行的时候就是报404错误&#xff0c;见文章&#xff1a; JAVA开发中SpringMVC框架的使用及常见的404问题原因以及SpringMVC框架基于注解的开发实例…

Apache SeaTunnel 9月份社区发展记录

各位热爱 SeaTunnel 的小伙伴们&#xff0c;9月份社区月报来啦&#xff01;这里将定期更新SeaTunnel社区每个月的重大进展&#xff0c;欢迎关注&#xff01; 月度Merge Stars 感谢以下小伙伴上个月为 Apache SeaTunnel 做的精彩贡献&#xff08;排名不分先后&#xff09;&…

【网络安全】CVE-2024-46990: Directus环回IP过滤器绕过实现SSRF

未经许可,不得转载。 文章目录 背景漏洞详情受影响版本解决方案背景 Directus 是一款开源 CMS,提供强大的内容管理 API,使开发人员能够轻松创建自定义应用程序,凭借其灵活的数据模型和用户友好的界面备受欢迎。然而,Directus 存在一个漏洞,允许攻击者绕过默认的环回 IP …

问卷调查毕设计算机毕业设计投票系统SpringBootSSM框架

目录 一、引言‌ ‌二、需求分析‌ 用户角色‌&#xff1a; ‌功能需求‌&#xff1a; ‌非功能需求‌&#xff1a; ‌三、系统设计‌ ‌技术选型‌&#xff1a; ‌数据库设计‌&#xff1a; ‌界面设计‌&#xff1a; ‌四、实现步骤‌ ‌后端实现‌&#xff1a; …

UM981最小系统推荐设计

L1&#xff1a;推荐使用 0603 封装的 68nH 射频电感 C1&#xff1a;推荐使用 100nF 100pF 两个电容并联 C2&#xff1a;推荐使用 100pF 电容 C3&#xff1a;推荐使用 n*10μF1*100nF 电容并联&#xff0c;总容值不小于 30μF R1&#xff1a;推荐使用 10kΩ电阻 注&#x…

dbt doc 生成文档命令示例应用

DBT提供了强大的命令行工具&#xff0c;它使数据分析师和工程师能够更有效地转换仓库中的数据。dbt的一个关键特性是能够为数据模型生成文档&#xff0c;这就是dbt docs命令发挥作用的地方。本教程将指导您完成使用dbt生成和提供项目文档的过程。 dbt doc 命令 dbt docs命令有…

【C++】map和set的介绍以及用法

个人主页 文章目录 ⭐一、系列式容器和关联式容器&#x1f680;二、set的使用1. set类的介绍2. set的构造3. set的迭代器4. set的常用函数 &#x1f3a1;三、multiset&#x1f384;四、map类的使用1. map类的介绍2. map的构造3. map的迭代器4. map的operator[]5. map的常用函数…

git删除错误的commit

文章目录 1、git删除错误的commit2、.gitignore配置文件不生效的问题 1、git删除错误的commit git的流程如图&#xff1a; 当某次失误造成commit的版本有问题&#xff0c;需要回退到正常的版本修改后重新add。 首先通过git log查看commit提交记录&#xff0c;可以看到HEAD-…

【在Linux世界中追寻伟大的One Piece】信号捕捉|阻塞信号

目录 1 -> 信号捕捉初识 2 -> 阻塞信号 2.1 -> 信号其他相关常见概念 2.2 -> 在内核中的表示 2.3 -> sigset_t 2.4 -> 信号集操作函数 2.5 -> sigprocmask 2.6 -> sigpending 3 -> 捕捉信号 3.1 -> 内核如何实现信号的捕捉 3.2 ->…

在Spring Boot中具有多个实现的接口正确注入的六种方式

​ 博客主页: 南来_北往 系列专栏&#xff1a;Spring Boot实战 在Spring Boot中&#xff0c;当一个接口具有多个实现时&#xff0c;正确地将这些实现注入到需要使用它们的地方是一个常见的需求。以下是在Spring Boot中实现这一目标的六种方式&#xff1a; 1. 使用Autowir…

Apple A18 和 A18 Pro 的裸晶照揭示出兩款處理器有著不同的設計

向來蘋果在發布使用新晶片的設備後&#xff0c;就會有人為新晶片進行詳細剖析&#xff0c;看看蘋果在新處理器上面又使用了什麼新技術。如今 iPhone 16 系列已經推出&#xff0c; Apple A18 和A18 Pro 兩款處理器自然也成為了研究對象。最近就有機構將 Apple A18 和 A18 Pro 兩…

雷池社区版本SYSlog使用教程

雷池会对恶意攻击进行拦截&#xff0c;但是日志都在雷池机器上显示 如何把日志都同步到相关设备进行统一的管理和分析呢&#xff1f; 如需将雷池攻击日志实时同步到第三方服务器, 可使用雷池的 Syslog 外发 功能 启用 Syslog 外发 进入雷池 系统设置 页面, 配置 Syslog 设置…

Miniconda更改虚拟环境创建路径

Miniconda更改虚拟环境创建路径 文章目录 Miniconda更改虚拟环境创建路径前言步骤一 修改配置文件步骤二 提升路径访问权限步骤三 测试配置修改是否生效 前言 在我使用 conda 命令创建新的虚拟环境时&#xff0c;发现创建好的虚拟环境存放路径是在 ../miniconda3/pkgs/ 路径下…

Python 在Excel中添加数据条

在Excel中添加数据条是一种数据可视化技巧&#xff0c;它通过条形图的形式在单元格内直观展示数值的大小&#xff0c;尤其适合比较同一列或行中各个单元格的数值。这种表示方式可以让大量的数字信息一目了然。本文将介绍如何使用Python在Excel中的指定单元格区域添加数据条。 …

Android:记录一个打包发布版的release包以后闪退的问题

个人感觉其实release闪退的问题挺难排查的&#xff0c;因为release包运行起来as捕获不到相应的应用程序进程&#xff0c;从而不易查看到日志&#xff0c;也是我玩得不溜&#xff0c;大家有不同的方法可以评论区探讨&#xff0c;我也定期回复一些评论一起讨论。以下是我遇到的情…

计算机毕业设计 基于Hadoop的智慧校园数据共享平台的设计与实现 Python毕业设计 Python毕业设计选题 Spark 大数据【附源码+安装调试】

博主介绍&#xff1a;✌从事软件开发10年之余&#xff0c;专注于Java技术领域、Python人工智能及数据挖掘、小程序项目开发和Android项目开发等。CSDN、掘金、华为云、InfoQ、阿里云等平台优质作者✌ &#x1f345;文末获取源码联系&#x1f345; &#x1f447;&#x1f3fb; 精…