go语言web框架--wego

地址:码云

首先映入眼帘的是他的目录结构,看起来真的非常简洁,非常契合wego的设计理念。
根目录下每一个文件夹都是相互独立的,
core是框架核心包,要是你愿意,只用core都行。

cmd/ 一个实现命令行的小工具
config/ 用于读取配置文件的工具
core/ 框架的核心包,主要实现路由等。。。
demo/ 使用例子
fserve/ 用于实现框架支持访问静态文件功能的包
log/ log包,实现了日志输出到终端和文件,使用方法看demo
module/ 框架的模组
module/apidoc api文档
module/session session模组
module/template template模组,支持内存缓存,空间换时间,支持多语言

怎么使用wego框架?
先来看看他的demo
demo下有四个目录

cmd  根目录cmd包的demo,严格来说,cmd根框架没有半毛钱关系。

core 这就是即将要介绍的demo

log   根目录log包的demo,这个日志库也是非常优秀的,去试试就知道了。为了契合设计理念,作者在core中都没有使用log包而是用的fmt,就是为了让开发者有更多选择余地。

webproxy  这是一个代理小工具,为了弥补框架不支持多站点的缺陷而存在。

现在来看core的demo

根目录下的main.go是启动文件,就两行代码 apidoc.Run是开启api文档,线上就要把它删了,core.Run开启服务器

这个目录结构也很简单,一看就知道是传统的mvc,不要看到传统两字就意味着老旧与古板。

conf文件夹下是配置文件,实际开发时就在上面做一些更改就好了

controllers下是控制器,等会儿做介绍

crt是放证书的目录

init项目初始化的地方,他里面写了session和template的初始化以供参考

www可以认为是view目录,这个是可以在配置文件里配置的,下面有三个文件夹,lang是存放语言包的,已经写了cn中文和en英文例子,在下面的index.lang和模板目录下的index.html是对应关系,自动调用;static是静态文件存放目录,放比如说css、js和图片之类的文件;template下放的是模板文件

哈,目录是介绍完了,但感觉少了什么?没错,少的是model目录,这个就由开发者按实际自己发挥了。

现在来介绍一下controller,主要是看看路由是怎么写的

首先一个控制器需要组合core基础Controller

type index struct {
	core.Controller // 继承基础Controller
}
// Prepare
func (inx *index) Prepare() {
	fmt.Println("Prepare运行成功")
}
// Finish
func (inx *index) Finish() {
	fmt.Println("Finish运行成功")
}
// Default 没有找到方法时执行
func (inx *index) Default() {
}
// APIupload 上传文件
func (inx *index) APIupload() {
}

控制器的Prepare和Finish方法在执行下面的业务逻辑方法的前后执行,这里有一点要注意的是finish和其他框架不同,finish和prepare是成对的,如果prepare被执行了,finish也一定会被执行。

控制器的default方法是在请求进入controller后没有找到相应的业务方法时执行

以大写的API开头的就是你的业务逻辑方法了,这个API可以在配置文件里配置

再来看看如何注册控制器

可以参考controllers下的init.go文件

ns := core.NewNameSpace( // 添加ns命名空间,对应路由/ns/
		"ns",
		core.NewNameSpace( // 添加get命名空间,对应路由/ns/get/
		    "get",
			core.NSaddController("test2", &test2{}), // 在get命名空间下添加控制器test2
		),		core.NewNameSpace( // /ns/action/
		"action",
			core.NewNameSpace( // /ns/action/save/				"save",
				core.NSaddController("test3", &test3{}), // /ns/action/save/test3/
			),
		),
core.NSaddController("test1", &test1{}), // /ns/test1/
core.NSaddController("index", &index{}), // /ns/index/
core.NSaddController("templatetest", &templatetest{}).SetStaticSpace(nil, setFuncStaticSpace), // /ns/templatetest/
core.NSaddController("session", &sessionTest{}), // /ns/session/
)
core.NSregister(ns) // 最后注册命名空间

core.NewNameSpace是添加命名空间,说白了就是如果你想构造 a/b/c/d这样的路径,你只需要嵌套abcd四个命名空间就行了
core.NSaddController是向命名空间添加控制器
core.NewNameSpace和core.NSaddController可以配合做出任何路由,强大吧。

最后用core.NSregister注册一下,路由就生效了。

哎呀,如果最后又发现有一个控制器忘记加进去了怎么办,可以用core.AddController(“index”, &index{}, “/a/b/c/”)加进去,第一个参数是这个控制器在url中的名字,可以为空哦,至于是什么效果自己去实验吧,第三个参数是该控制器想要插队的路由。

SetStaticSpace( 控制器静态内存空间 , 业务方法静态内存空间 )
这个是框架创新的一个功能,可以为某一个控制器和方法绑定一个对象,是一个interface。这个对象会在访问那个控制器和方法时返回来,在core.Controller里去取,

有什么用处呢?非常强大,可以实现一些偏门的功能,因为偏门,所以我暂时想不到有什么突出的用法,

但我能描述一些这个功能的原理,比如有一个index方法,先给他绑定一个int类型的count变量,当请求这个index方法时,可以得到你之前set的那个count变量,是完完全全的同一个,内存地址都不会变,然后你可以count++来记录index方法的访问次数。当然count必须传指针进去也就是&,而且使用时要注意并发问题。

至此教程完,感谢观赏
原文

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
本节提供有关关键的 C# 语言功能和 C# 可通过 .NET Framework 访问的功能的详细信息。 本节中大部分内容都假定您已了解有关 C# 和一般编程概念的一些知识。如果您刚开始学习编程或 C#,则应从 Visual C# 指导教程开始。您可能还想访问 Visual C# 开发中心,此处提供很多教程、示例和视频,可帮助您入门。 有关特定的关键字、运算符和预处理器指令的信息,请参见 C# 参考。有关 C# 语言规范的信息,请参见 C# 语言规范。 这部分提供有关 C# 关键字、运算符、编译器错误和警告的参考资料。 ---------------------------------------------------------------------------------- 语言部分 深入 C# 程序 Main() 和命令行参数(C# 编程指南) 类型(C# 编程指南) 数组(C# 编程指南) 字符串(C# 编程指南) 语句、表达式和运算符(C# 编程指南) 类和结构(C# 编程指南) 属性(C# 编程指南) 索引器(C# 编程指南) 委托(C# 编程指南) 事件(C# 编程指南) 泛型(C# 编程指南) LINQ 查询表达式(C# 编程指南) Lambda 表达式(C# 编程指南) 迭代器(C# 编程指南) 命名空间(C# 编程指南) 可空类型(C# 编程指南) 不安全代码和指针(C# 编程指南) XML 文档注释(C# 编程指南) 平台部分 应用程序域(C# 编程指南) 程序集和全局程序集缓存(C# 编程指南) 属性(C# 编程指南) 集合类(C# 编程指南) 异常和异常处理(C# 编程指南) 互操作性(C# 编程指南) 线程处理(C# 编程指南) 性能(C# 编程指南) 反射(C# 编程指南) C# DLL(C# 编程指南) 安全性(C# 编程指南) 请参见 其他资源 C# 参考 Visual C# Visual C# 指导教程 ---------------------------------------------------------------------------------- 本节内容 C# 关键字 提供指向有关 C# 关键字和语法的信息的链接。 C# 运算符 提供指向有关 C# 运算符和语法的信息的链接。 C# 预处理器指令 提供指向有关在 C# 源代码进行嵌入所使用的编译器命令的信息的链接。 C# 编译器选项 包括有关编译器选项以及如何使用这些选项的信息。 C# 编译器错误 包含一些代码段,演示 C# 编译器错误和警告的原因以更正方法。 C# 术语 提供 C# 单词和短语的词汇表。 相关章节 C# 语言规范 提供一些链接,供获取 Microsoft Word 格式的最新版本的 C# 语言规范。 C# 常见问题 在 C# Developer Center 中提供内容不断增加的 C# 常见问题列表。 Microsoft 知识库中的 C# 知识库文章 提供对存储在 MSDN 上的 C# 相关知识库文章的动态搜索。 Visual C# 提供 Visual C# 文档门户。 Visual C# 示例 提供 Visual C# 示例的列表和有关如何在本地磁盘上查找这些示例的说明。 Visual C# 代码编辑器功能 提供一些链接,这些链接指向描述 IDE 和编辑器的概念性主题及任务主题。 用 Visual C# 编写应用程序 提供一些链接,这些链接指向说明如何执行某些常见编程任务的主题。 C# 编程指南 包括关于如何使用 C# 编程语言的信息。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值