首页 > 其他分享 >打造DiTing聊天室之从零开始:准备工作指南

打造DiTing聊天室之从零开始:准备工作指南

时间:2024-03-31 09:44:08浏览次数:22  
标签:Web 聊天室 github 项目 工作指南 DiTing Go gin com

前言

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

  1. 初始化 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

点关注,不迷路

好了,以上就是这篇文章的全部内容了,如果你能看到这里,非常感谢你的支持!

如果你觉得这篇文章写的还不错, 求点赞

标签:Web,聊天室,github,项目,工作指南,DiTing,Go,gin,com
From: https://www.cnblogs.com/DannMu/p/18106403

相关文章

  • python趣味编程-使用 Django 和 WebSockets 的 Python 简单实时聊天室网站
    在Python中使用Django的简单实时聊天室系统该项目名为“简单实时聊天室系统”。这是一个使用Python和DjangoFramework开发的基于Web的应用程序。该应用程序是一个供随机用户使用的简单聊天室。所有人都可以在一个聊天框或对话框中进行交流。聊天消息会自动更新到所......
  • 多线程并发聊天室简单实现代码详解 -- 涉及网络编程,多线程和线程同步的知识
            本项目主要完成多线程并发聊天室的基础功能,即多个客户端之间通过服务器可以实现群发消息,重点在于学习网络编程,多线程和线程同步的基础知识(基于Linux)。    下面我会详解每一部分的代码。1.主线程        1.1首先由于是自己在电脑里面测试,......
  • Minimal BASH-like line editingis supported解决方法
    一、问题原因        Windows/Linux双启动的电脑一般都使用grub作为引导程序,出现这个原因,是windows启动的时候,没有找到启动文件。我是因为安装了windows和Linux双系统,卸载Ubuntu系统时,没有完全删除Ubuntu的相关信息,重启电脑将无法正常进入Windows系统,开机后一直卡在gr......
  • [Paper Reading] GLIDE: Towards Photorealistic Image Generation and Editing with
    GLIDE:TowardsPhotorealisticImageGenerationandEditingwithText-GuidedDiffusionModelsGLIDE(GuidedLanguagetoImageDiffusionforGenerationandEditing)时间:22/03机构:OpenAITL;DR本文研究使用DiffusionModel做图像生成过程,如何更好地加入conditional信息......
  • Editing Factual Knowledge and Explanatory Ability of Medical Large Language Mode
    本文是LLM系列文章,针对《EditingFactualKnowledgeandExplanatoryAbilityofMedicalLargeLanguageModels》的翻译。医学大语言模型的编辑事实知识与解释能力摘要1引言2相关工作3方法4实验5结论6局限性摘要模型编辑旨在精确地修改大型语言模型......
  • 用JavaSocket编程开发聊天室
    1.设计内容1.用Java图形用户界面编写聊天室服务器端和客户端,支持多个客户端连接到一个服务器。每个客户端能够输入账号。2.可以实现群聊(聊天记录显示在所有客户端界面)。3.完成好友列表在各个客户端上显示。4.可以实现私人聊天,用户可以选择某个其他用户,单独发送信息。......
  • 使用 Docker 部署 Fiora 在线聊天室平台
    一、Fiora介绍Fiora简介Fiora是一款开源免费的在线聊天系统。GitHub:https://github.com/yinxin630/fioraFiora功能注册账号并登录,可以长久保存你的数据加入现有群组或者创建自己的群组,来和大家交流和任意人私聊,并添加其为好友多种消息类型,包括文本/表情/图片/......
  • 需要在本地实现一个聊天室,多个tab页相互通信,不能用websocket,你会怎么做?
    可以考虑使用以下方法:使用LocalStorage:这个存储API可在浏览器的不同标签页之间共享数据。当一个标签页发送消息时,将消息存储在LocalStorage中。其他标签页可以监听该存储区的变化,并读取最新的消息内容来实现通信效果。//监听变化2window.addEventListener("storage",(e)=>......
  • Asp-Net-Core学习笔记:3.使用SignalR实时通信框架开发聊天室
    SignalR牛刀小试在MVP杨老师的博客里看到这么个东西,我还以为是NetCore3才推出的新玩意,原来是已经有很多年的历史了,那看来还是比较成熟的一个技术了。简介SignalR是一个.NETCore/.NETFramework的开源实时框架,SignalR的可使用WebSocket,ServerSentEvents和LongPolling......
  • flutter3+dart3聊天室|Flutter3跨平台仿微信App语音聊天/朋友圈
    全新研发flutter3+dart3+photo_view跨多端仿微信App界面聊天Flutter3-Chat。flutter3-chat基于最新跨全平台技术flutter3+dart3+material-design+shared_preferences+easy_refresh构建的仿微信APP界面聊天实例项目。实现发送图文表情消息/gif大图、长按仿微信语音操作面板、图片......