前言
Hello,我是单木。接下来我将会开启一个新的博客系列,使用 GoLang 从 0 到 1 实现一个IM聊天室项目。
为什么要做这个项目
说实话,作为一个Javer,我对于 Go 的了解也还仅限于前两天时间刚刚突击的基本语法,但是没办法,我即将实习的公司采用 Go 作为技术栈,我只能开始转战 Go 的旅程。作为一个 Go 语言的新手,我肯定会遇到各种各样的问题和挑战。正因为如此,我希望通过记录我的学习过程和解决问题的方法,能够帮助其他新手更好地理解和应对在学习 Go 语言过程中可能遇到的困难。我希望,通过分享我的经验和教训,我能够为那些正在踏上学习 Go 语言之路的人们提供一些有价值的帮助和指导。废话少说,让我们进入正题。
项目构建
创建一个空白项目
如果下载安装 Go 和创建一个项目网上已经有许多非常优秀的教程了,这里请允许我偷个懒,如果有需要,这里提供两个连接,请大家自行阅读Go 安装和GoLand 的安装和使用
接下来我们创建一个全新的项目,这里就叫做DiTing-Go好了,那么现在一个空白的 Go 项目就搭建好了。
项目的层级
好了,现在我们先不考虑具体的实现细节,我们先来对项目的功能做一个层次上的划分。首先,每一个 Go 程序都需要有一个main.go作为程序的执行入口。其次,对于一个Web项目来说,任何一个功能都是按照下图中的流程进行的。
其中,路由层负责根据用户访问的路径将请求转发给不同的控制器,控制层负责进行简单的逻辑处理,复杂的业务逻辑则应该调用服务层进行处理。模型层则负责和数据库进行交互。因此我们可以同样按照这个顺序来对项目进行划分。同时,在项目中还会存在一些固定的配置以及项目中产生的日志,这两个部分也应当被单独划分。最终项目的层级结构如下:
├── conf #项目配置文件目录
│ └── config.yaml #例如:toml、yaml等等
├── controllers #控制层目录
├── services #服务层目录
├── models #模型层目录,和数据库表的映射保存在这里
├── routes #路由目录,负责分发请求
├── logs #日志文件目录,保存项目运行过程中产生的日志。
├── main.go #项目入口
├── README.md
├── .gitignore
搭建一个简单的Web
接下来,我们就可以开始搭建我们的 Web 项目了。现在 Go 的生态中已经存在了大量的 Web 框架可以帮助我们快速的开发,这里简单介绍一下常见的 Web 框架。
框架选型
名称 | 优点 | 缺点 | 地址 |
---|---|---|---|
iris | 主要侧重于Web开发,提供了Web开发的一系列功能组件,基于MVC开发模式。iris这一年发展比较快,从一个Web Server的组件,也慢慢朝着beego的设计方向努力。 | 号称性能最强,结果平平。非模块化设计。最近两年开始朝beego方向发展,但整体框架能力还不完备,需要加油。 | https://github.com/kataras/iris |
beego | 开源的比较早,最早的一款功能比较全面的Golang开发框架,一直在Golang领域有着比较大的影响力,作者谢大多年组织着国内影响力比较大GopherCN活动。beego有着比较丰富的开发模块、开箱即用,提供了基于MVC设计模式的项目结构、开发工具链,主要定位为Web开发,当然也可以用于非Web项目开发。 | 起步较早,自谢大创业后,近几年发展较慢。非模块化设计,对第三方重量级模块依赖较多。 | https://github.com/beego/beego |
gin | 专注于轻量级的Web Server,比较简单,易于理解,路由和中间件设计不错,可以看做替代标准库net/http.Server的路由加强版web server。献给爱造轮子的朋友们。 | 功能简单易用,既是优点,也是缺点。 | https://github.com/gin-gonic/gin |
考虑到文档的完善程度和使用的普遍程度,DiTing 中将采用 Gin 作为 Web 开发框架。
开始搭建
安装 Gin
- 初始化 Go项目,我们首先需要再项目根目录中打开cmd,输入以下命令进行项目初始化以及 Gin 的安装
#初始化项目,别忘了!
go mod init DiTing
#安装gin框架
go get -u github.com/gin-gonic/gin
搭建一个简单的 Gin Demo
// 注意,这里必须是main才能成为项目的入口
package main
// 导入Gin
import (
"github.com/gin-gonic/gin"
)
func main() {
router := gin.Default()
router.GET("/", func(ctx *gin.Context) {
// 简单返回一个json
ctx.JSON(200, gin.H{
"code": 0,
"msg": "ok",
})
})
// 运行端口,访问地址应该是127.0.0.1:5000
err := router.Run(":5000")
if err != nil {
return
}
}
测试
采用curl命令进行简单的测试,在cmd中输入
curl 127.0.0.1:5000
// 响应 {"code":0,"msg":"ok"}
控制台输入对应的日志,Demo搭建成功
问题记录
安装 Gin 报错
go get -u github.com/gin-gonic/gin
go: module github.com/gin-gonic/gin: Get "https://proxy.golang.org/github.com/gin-gonic/gin/@v/list": dial tcp 142.251.42.241:443: connectex: A connection attempt failed because the connected party did not properly respond after a period of time, or established connection failed because connected host has failed to respond.
这是因为国内无法访问到国外的仓库,需要将下载地址更换为国内镜像
解决方法
go env -w GOPROXY=https://goproxy.cn
点关注,不迷路
好了,以上就是这篇文章的全部内容了,如果你能看到这里,非常感谢你的支持!
如果你觉得这篇文章写的还不错, 求点赞👍 求关注❤️ 求分享👥 对暖男我来说真的 非常有用!!!
白嫖不好,创作不易,各位的支持和认可,就是我创作的最大动力,我们下篇文章见!
如果本篇博客有任何错误,请批评指教,不胜感激 !
本文的 Github,欢迎各位人才用Star砸死我。如果想要加入这个项目或者有任何建议,欢迎联系