Go中级之手把手教你开发一个简易的个人博客网站(一)项目基本架构和数据库链接

您所在的位置:网站首页 编写web页面使用什么语言 Go中级之手把手教你开发一个简易的个人博客网站(一)项目基本架构和数据库链接

Go中级之手把手教你开发一个简易的个人博客网站(一)项目基本架构和数据库链接

2024-07-14 19:48| 来源: 网络整理| 查看: 265

前言

本文是记录的是"Go语言之手把手教你开发一个简易的个人博客网站(一)"

此文是个人学习归纳的记录,腾讯云独家发布,未经允许,严禁转载,如有不对, 还望斧正, 感谢!

嗯,一个程序员,怎么能没有自己的博客网站呢? 然后就写了自己的个人博客站点, 然后想着归纳一下, 出个简易版的Go语言的教程。

当然,现在创建一个个人站点,其实很简单,可以用低代码平台来做,github上也有很多框架什么的,只要你动手去做,没有什么完成不了的。

项目介绍功能描述

一个个人博客网站,用来记录个人的文章,前台用来展示文章,后台给作者使用,用来对文章进行管理。

很简单,功能很简单。

技术栈

本次选用前后端分离的架构

前端:html,less,element-plus,Vue3,javascript

后端:golang,gin,Mongodb

开发工具: Goland

开发前端用的技术都是目前比较流行的,后端gin框架也是golang里面非常容易上手的,Mongodb的话,比较轻量,使用方便。

大致构思一下

草图,不规范,实际开发中不会这样草率,我一个人的话,就图一个方便。

项目最终的目录结构,额,完整版的不便展示,我自己还在用,下面的,我有些代码结构改了一下。

代码语言:go复制GoServe ├── configs ├── docs ├── global ├── internal │ ├── dao │ ├── middleware │ ├── model │ ├── routers │ └── service ├── pkg ├── main.go

configs:配置文件。

docs:文档集合。

global:全局变量。

internal:内部模块。

dao:所有与数据相关的操作都在 dao 层进行

middleware:中间件。

model:模型层,用于存放 model 对象。

routers:路由相关逻辑处理。

service:项目核心业务逻辑。

pkg:项目相关的模块包。

本次开发的一些基础知识Gin

Gin 是一个用 Go 语言编写的 HTTP Web 框架,它具有简洁的 API、高性能和良好的生态系统。以下是一个简单的 Gin 框架使用教程:

安装 Gin:

首先,确保你已经安装了 Go 语言。然后,在Goland里面或者其他开发工具里面使用以下命令安装 Gin:

代码语言:bash复制go get -u github.com/gin-gonic/gin创建一个简单的 HTTP 服务器:

直接在项目里面,创建一个名为 main.go 的文件,然后添加以下代码:

代码语言:go复制package main import "github.com/gin-gonic/gin" func main() { r := gin.Default() r.GET("/", func(c *gin.Context) { c.JSON(200, gin.H{ "message": "this is 言志志", }) }) r.Run(":9090") }

这段代码创建了一个简单的 HTTP 服务器,监听 8080 端口。当访问根路径("/")时,服务器会返回一个 JSON 格式的 "this is 言志志" 消息。

运行服务器:

在终端中,进入到包含 main.go 文件的目录,然后运行以下命令:

代码语言:bash复制go run main.go

现在,你的 Gin 服务器应该已经启动并在监听 8080 端口。访问 http://localhost:8080,你将看到 "Hello, World!" 消息。

添加路由和处理函数:

你可以根据需要添加更多的路由和处理函数。例如,添加一个 POST 请求路由:

代码语言:go复制r.POST("/submit", func(c *gin.Context) { c.JSON(200, gin.H{ "message": "Form submitted successfully!", }) })

这将在服务器上创建一个新的 POST 路由,当用户访问 http://localhost:8080/submit 时,将返回一个 JSON 格式的 "Form submitted successfully!" 消息。

使用中间件:

Gin 提供了一些内置的中间件,如日志记录、跨域资源共享(CORS)等。要使用中间件,可以使用 Use() 方法将其添加到路由器中。例如,添加一个日志中间件:

代码语言:go复制import "github.com/gin-contrib/zap" func main() { r := gin.New() // 使用日志中间件 logger, _ := zap.New() r.Use(ginzap.Ginzap(logger, time.RFC3339, true)) // ... 其他路由和处理函数 r.Run(":8080") }

这将为每个请求添加日志记录功能。

这只是 Gin 框架的一个简单入门教程,看到这,你就差不多入门了,官方文档也很详细,自己去搜就行了。

mongodb数据库

MongoDB是一个文档型,非关系型数据库,支持动态模式,不需要预先定义数据结构。在项目初期,可以更容易地调整数据模型以适应需求变化,对于小型项目来说,MongoDB数据库提供了灵活性、高性能、可扩展性和易用性等优势。

博客在本地测试的话,你需要自己安装Mongodb数据库到你电脑上,或者使用云的,这个自己去搜,我只介绍了在本地的。

还有一点就是,go里面流行的gorm,并没有支持Mongodb

所以我们首先是安装Go的MongoDB驱动程序

使用以下命令安装go.mongodb.org/mongo-driver包:

代码语言:bash复制go get go.mongodb.org/mongo-driver/mongo

安装完成后,您可以在Go代码中导入这个包:

代码语言:go复制import ( "go.mongodb.org/mongo-driver/mongo" )

接下来,需要创建一个mongo.Client结构体的实例,并使用mongo.Connect函数连接到MongoDB数据库。

要在Go代码中使用MongoDB,需要使用mongo.Client结构体的方法来操作数据库和集合。可以使用Client.Database方法获取数据库,然后使用Database.Collection方法获取集合。

链接MongoDB数据库并实现对数据的CRUD操作,可以看下面的教程

导入必要的包:代码语言:go复制import ( "context" "fmt" "go.mongodb.org/mongo-driver/bson" "go.mongodb.org/mongo-driver/mongo" "go.mongodb.org/mongo-driver/mongo/options" "log" "time" )定义数据结构:代码语言:go复制type User struct { ID primitive.ObjectID `bson:"_id,omitempty"` Name string `bson:"name"` Age int `bson:"age"` CreatedAt time.Time `bson:"created_at"` }

后面的Tab标记是提示Mongodb数据库的

连接到MongoDB数据库:代码语言:go复制func main() { // 创建一个客户端选项,指定MongoDB的连接URI clientOptions := options.Client().ApplyURI("mongodb://localhost:27017") // 使用客户端选项连接到MongoDB数据库 client, err := mongo.Connect(context.Background(), clientOptions) if err != nil { log.Fatal(err) } // 在程序结束时断开与数据库的连接 defer client.Disconnect(context.Background()) }选择数据库和集合:代码语言:go复制// 从客户端实例中获取名为"test"的数据库 db := client.Database("test") // 从数据库实例中获取名为"users"的集合 collection := db.Collection("users")

然后就是基本的CRUD了。

插入数据(Create):代码语言:go复制// 定义一个User结构体实例 user := User{ Name: "John Doe", Age: 30, CreatedAt: time.Now(), } // 向集合中插入一个新文档,包含上面定义的User结构体实例 result, err := collection.InsertOne(context.Background(), user) if err != nil { log.Fatal(err) } // 输出插入文档的ID fmt.Println("Inserted ID:", result.InsertedID)查询数据(Read):代码语言:go复制// 定义一个User类型的切片,用于存储查询结果 var users []User // 定义一个过滤器,用于筛选出名为"John Doe"的文档 filter := bson.M{"name": "John Doe"} // 使用过滤器从集合中查询文档 cur, err := collection.Find(context.Background(), filter) if err != nil { log.Fatal(err) } // 将查询结果解码为User类型的切片 err = cur.All(context.Background(), &users) if err != nil { log.Fatal(err) } // 遍历查询结果并输出 for _, user := range users { fmt.Println(user) }更新数据(Update):代码语言:go复制filter := bson.M{"name": "John Doe"} update := bson.M{"$set": bson.M{"age": 31}} result, err := collection.UpdateMany(context.Background(), filter, update) if err != nil { log.Fatal(err) } fmt.Println("Updated", result.ModifiedCount, "documents")删除数据(Delete):代码语言:go复制filter := bson.M{"name": "John Doe"} result, err := collection.DeleteMany(context.Background(), filter) if err != nil { log.Fatal(err) } fmt.Println("Deleted", result.DeletedCount, "documents")完整操作

创建一个go项目,然后先新建一个main.go文件,键入以下代码

代码语言:go复制package main import( "GoServe/global" ) func init(){ err := setupDB() if err != nil { log.Fatalf("init.setupDBEngine err: %v", err) } } func main(){ r := gin.Default() r.Run(":9090") } func setupDB() error { err := global.MongodbJoin() if err != nil { return err } return nil }

然后我在global文件夹下面创建了一个db.go的文件,键入以下代码

代码语言:go复制package global import ( "context" "fmt" "go.mongodb.org/mongo-driver/mongo" "go.mongodb.org/mongo-driver/mongo/options" "log" ) // Client 定义一个全局变量,存储连接了数据库之后的句柄 var Client *mongo.Client // MongodbJoin 函数用于连接到MongoDB数据库 func MongodbJoin() error { // 设置连接选项 clientOptions := options.Client().ApplyURI("mongodb://localhost:27017") // 使用连接选项连接到MongoDB var err error Client, err = mongo.Connect(context.Background(), clientOptions) if err != nil { return fmt.Errorf("数据库连接失败:%v", err) } // 确保在最后关闭链接 err = Client.Disconnect(context.Background()) if err != nil { return fmt.Errorf("无法断开与Mongodb数据库的连接:%v", err) } return nil }

到这里,我们就大概了解了博客的gin框架的使用和mongodb数据库的链接使用,下一期我们将抽离配置信息,完成配置模块,和相关代码的修改。

本次实践参考《go语言编程之旅》,我是在已经完成了之后,才看到这本书的,然后学习了作者的方法,按照他的思路将我的代码进行了结构上的重构。

我正在参与2023腾讯技术创作特训营第四期有奖征文,快来和我瓜分大奖!



【本文地址】


今日新闻


推荐新闻


CopyRight 2018-2019 办公设备维修网 版权所有 豫ICP备15022753号-3