《从0到1搭建一个im项目》项目初始化 | go 技术论坛-380玩彩网官网入口

[toc]

概况(hichat)

介绍

在学习完go的基础后,我们现在从0到1来搭建一个简单的即时聊天项目(im)的api。

主要功能

  • 登录、注册、用户信息更新、账号注销

  • 单聊、群聊

  • 发送文字、表情包、图片、语音

  • 加好友、好友列表、建群、加入群

技术栈

在该项目中使用的技术栈:go、gin、websocket、udp、mysql、redis、viper、gorm、zap、md5、jwt。

项目地址

系统架构

系统架构如下:

通信流程

通信流程如下:

开发环境

ide: goland

数据库工具:vscode

环境搭建可参考这一篇文章:

项目初始化

这里将项目放置目录:

/users/feng/go/src

使用命令初始化:

go mod init hichat

当然也可是直接使用goland新建项目

构建项目目录:

hichat   
    ├── common    //放置公共文件
    │  
    ├── config    //做配置文件
    │  
    ├── dao       //数据库crud
    │  
    ├── global    //放置各种连接池,配置等
    │   
    ├── initialize  //项目初始化文件
    │  
    ├── middlewear  //放置web中间件
    │ 
    ├── models      //数据库表设计
    │   
    ├── router           //路由
    │   
    ├── service     //对外api
    │   
    ├── test        //测试文件
    │  
    ├── main.go     //项目入口
    ├── go.mod            //项目依赖管理
    ├── go.sum            //项目依赖管理

配置mysql连接池

新建数据库

使用sql语句新建数据库hi_chat

声明全局mysql连接池变量

在global目录下新建一个global.go文件

package global
import (
    "gorm.io/gorm"
)
var (
    db            *gorm.db
)

建立连接池

在initialize项目下创建db.go文件

package initialize
import (
    "fmt"
    "log"
    "os"
    "time"
  "hichat/global"
    "gorm.io/gorm/logger"
    "gorm.io/driver/mysql"
    "gorm.io/gorm"
)
func initdb() {
    dsn := fmt.sprintf("%s:%s@tcp(%s:%d)/%s?charset=utf8mb4&parsetime=true&loc=local", user,
        password, host, port, dbname)
    //注意:user和password为mysql数据库的管理员密码,host和port为数据库连接ip端口,dbname为要连接的数据库
    //写sql语句配置
    newlogger := logger.new(
        log.new(os.stdout, "\r\n", log.lstdflags), // io writer(日志输出的目标,前缀和日志包含的内容——译者注)
        logger.config{
            slowthreshold:             time.second, // 慢 sql 阈值
            loglevel:                  logger.info, // 日志级别
            ignorerecordnotfounderror: true,        // 忽略errrecordnotfound(记录未找到)错误
            colorful:                  true,        // 禁用彩色打印
        },
    )
    var err error
  //将获取到的连接赋值到global.db
    global.db, err = gorm.open(mysql.open(dsn), &gorm.config{
        logger: newlogger, //打印sql日志
    })
    if err != nil {
        panic(err)
    }
}

在main中调用:

package main
import (
    "hichat/initialize"
)
func main() {
    //初始化数据库
    initialize.initdb()
}

初始化日志zap配置

拉取日志依赖

go get go.uber.org/zap

日志初始化

在initialize目录中新建一个logger.go文件

package initialize
import (
    "log"
    "go.uber.org/zap"
)
func initlogger() {
    //初始化日志
    logger, err := zap.newdevelopment()
    if err != nil {
        log.fatal("日志初始化失败", err.error())
    }
    //使用全局logger
    zap.replaceglobals(logger)
}

最后需要在main中调用

func main() {
    //初始化日志
    initialize.initlogger()
    //初始化数据库
    initialize.initdb()
}

总结

到这里整个项目的初始化基本上完成了,这是第一篇,后续我们就开始功能模块的开发,谢谢您的阅读。

本作品采用《cc 协议》,转载必须注明作者和本文链接
刻意学习
本帖由系统于 2年前 自动加精
讨论数量: 6

:heart_eyes:

2年前

代码包在哪啊

2年前
ice_moss (楼主) 2年前

又有项目可以学习了,谢谢啦 :heart_eyes:

1年前

mark : 1:

1年前

: 1:

1年前

讨论应以学习和精进为目的。请勿发布不友善或者负能量的内容,与人为善,比聪明更重要!
网站地图