介绍Go和Mggo框架

大家好! 我想分享我在Go中的第一次编程经验。

我以前端开发人员的身份开始编程。 然后,我切换到了Python的后端,对我自己来说,切换到了C#Asp.Net MVC。 但是最近,几个月前,我遇到了这种美丽的语言Go。

为什么去


1-编译语言。
2是一种非常不寻常的语言。

结构,界面……我不得不动脑子,重新学习。 首要的问题是重新学习。 课程在哪里? OOP在哪里? 您最喜欢的模式在哪里?

但是我有点不高兴,Go语言向我揭示了,我爱上了它。 好吧,当然,我决定编写我的第一个“自行车”的第一件事,即称为MGGO的Web框架。

我想要的和我渴望的


当然,我立即想制作一个像Asp.Net这样的MVC框架。 但是事实并非如此简单,因为Go语言是独特的。 但是这是发生了什么:

控制器


控制器是一种结构,其中方法既可以是外部(api),也可以是内部方法,以及负责视图的方法。

在一个例子中,立即考虑新闻控制器。

import mggo type News struct{ ID int Title string Text string } func NewNews() *NewNews{ return &NewNews{} } func init() { //   mggo.RegisterController("news", NewNews) } func(n *News) Read(ctx *mggo.BaseContext) News{ return News{1, "First News", "Text first News"} } func(n *News) IndexView(ctx *mggo.BaseContext, data *mggo.ViewData, path []string){ data.View = "news/news.html" data.Data["News"] data.Data["News"] = n.Read() } 


之后,可在/新闻/

其中news是控制器的名称,主页是index,由IndexView方法负责。

现在关于api。 News控制器具有Read方法。 默认情况下,它仅是服务。 为了允许对此方法进行api请求,您需要在控制器函数“ init”中为该方法添加权限。

 func init(){ ... mggo.AppendRight("News.Read", mggo.RRightGuest) } 

之后,Read方法可用于任何用户的api调用。

 fetch("/api/", { "method": "POST", "headers": { 'Accept': 'application/json', 'Content-Type': 'application/json' }, "body": JSON.stringify({ "method": "News.Read", "params": {} }) }).then(res => res.Json()).then(console.log) 

结果

 {result: {ID:1, Title:"First News", Text:"Text first News"}} 

有关参数的一点。 params对象内的所有参数将作为结构字段传递。

例如,让我们稍微修改一下Read函数:

 func(n *News) Read(ctx *mggo.BaseContext) News{ if n.ID ==1 { return News{1, "First News", "Text first News"} } else { return News{} } } 

并且api调用应使用参数ID:1-params {ID:1})

还有什么


PostgreSQL的 Go-pg库在框架中连接。 让我们马上举一个例子。 我们的新闻控制器具有静态数据。 需要更改。 为此,您需要做的第一件事是创建一个News表。 在init函数中添加几行。

 func init(){ ... mggo.InitCallback(func(){ mggo.CreateTable([]interface{}{(*News)(nil)}) }) } 

现在,在初始化之后,我们将获得新闻表,其中包含ID,标题和文本字段。

更改读取方法:

 func(n *News) Read(ctx *mggo.BaseContext) News{ mggo.SQL().Select(n) return *n } 

如果我们使用参数ID:1来调用News.Read方法,那么结果是我们使用键1从新闻表中获取了数据。

Go-pg功能可以在文档中找到。

但这还不是全部。 此处无法描述所有内容。 希望我会尽快写和发布详细的文档。 这是Mggo可以做的简短摘要。

⁃网络插座
⁃服务器和客户端事件
⁃缓存方法结果
⁃支持JsonRPC调用
ba Liba用于快速控制器和视图创建

现在就这些了。 我希望有人会觉得这篇文章有用。 当然,还有许多其他现成的很酷的框架。 我只是想尝试自己做一些个人经验。

链接到项目

链接到示例和快速入门

Source: https://habr.com/ru/post/zh-CN456472/


All Articles