掘金 后端 ( ) • 2024-04-01 13:50

theme: condensed-night-purple

前言

Hello,我是单木。接下来我将会开启一个新的博客系列,使用 GoLang 从 0 到 1 实现一个IM聊天室项目。

为什么要做这个项目

说实话,作为一个Javer,我对于 Go 的了解也还仅限于前两天时间刚刚突击的基本语法,但是没办法,我即将实习的公司采用 Go 作为技术栈,我只能开始转战 Go 的旅程。作为一个 Go 语言的新手,我肯定会遇到各种各样的问题和挑战。正因为如此,我希望通过记录我的学习过程和解决问题的方法,能够帮助其他新手更好地理解和应对在学习 Go 语言过程中可能遇到的困难。我希望,通过分享我的经验和教训,我能够为那些正在踏上学习 Go 语言之路的人们提供一些有价值的帮助和指导。废话少说,让我们进入正题。

项目构建

创建一个空白项目

如果下载安装 Go 和创建一个项目网上已经有许多非常优秀的教程了,这里请允许我偷个懒,如果有需要,这里提供两个连接,请大家自行阅读Go 安装GoLand 的安装和使用 接下来我们创建一个全新的项目,这里就叫做DiTing-Go好了,那么现在一个空白的 Go 项目就搭建好了。

项目的层级

好了,现在我们先不考虑具体的实现细节,我们先来对项目的功能做一个层次上的划分。首先,每一个 Go 程序都需要有一个main.go作为程序的执行入口。其次,对于一个Web项目来说,任何一个功能都是按照下图中的流程进行的。

image.png

其中,路由层负责根据用户访问的路径将请求转发给不同的控制器,控制层负责进行简单的逻辑处理,复杂的业务逻辑则应该调用服务层进行处理。模型层则负责和数据库进行交互。因此我们可以同样按照这个顺序来对项目进行划分。同时,在项目中还会存在一些固定的配置以及项目中产生的日志,这两个部分也应当被单独划分。最终项目的层级结构如下:

├── 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搭建成功

image.png

问题记录

安装 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砸死我。如果想要加入这个项目或者有任何建议,欢迎联系