Go Web App Example – Entry Point, File Structure, Models, and Routes

谢权 · · 1199 次点击 · · 开始浏览    
这是一个创建于 的文章,其中的信息可能已经有所发展或是发生改变。

有很多可以快速搭建Go web项目的开源框架,与其用一个开源框架,我更愿意自己Go的原生的东西去构建一个带认证功能的model-view-controller (MVC) web 程序。记住,这只是众多构建你web 项目方法的一种。

可以在Github查看项目的代码:https://github.com/josephspurrier/gowebapp

项目文件结构

第三方包

程序入口

我希望我的main package,gowebapp.go,只做下面几件事情:

  • 设置程序结构
  • 读取Json配置文件并传递给需要配置的包
  • 启动HTTP listener

通过使用这种策略,配置在一个地方可以使你应用程序很容易的添加或者删除某个组件。无论是标准库还是第三方包。

程序的配置定义在configuration 中和保存在config变量中。

runtime 设置和flags 我们定义在init() 函数中,组建通过main()函数读取config.json里面的参数进行设置。

共享包

我希望我的项目是低耦合的,每个组件都能定义自己的结构和配置。我不想注册一个全局的容器,因为那样会创建太多的依赖。我这么设计为了当程序启动的时候,一个Json配置文件通过解析然后通过Configure() 或者 Load() 函数初始化每一个packages。许多共享packages就像第三方包一样。

这种结构的好处是:

  • Each package in the shared/ folder only imports packages from the standard library or an external package so it’s easy to reuse the package in other applications
  • When adding configurable settings to each package, they only need to be added in two places: the config.json file and the package itself
  • If the API of an external package changes, it’s easy to update the wrapper without modifying any code in your core application

这个包只引用了标准库和一个第三方包:

这个包定义了一个叫Session struct,他的配置是从json文件读取的。一些变量只能在同一个包下访问,有些可以被外部包访问。

Configure() 函数传递结构代替各个参数,不需要在外部包修改代码(Json 文件除外)当Session结构体发生变化时。

这个包用来调用Instance()函数,这样核心程序就不需要直接引用gorilla/sessions 包。

Models

所有的 models都应该保存在一个 model文件夹下。一般程序都会支持Mysql或者SQLite,但是可以很容易地改变成使用另一类型的数据库

函数的命名最好能够清晰明了,一看就能知道这个程序是做什么的。

Routes

每个routes都定义在route.go,我决定使用julienschmidt/httprouter来提高速度,justinas/alice用来实现chaining access control lists (ACLs)去控制主要的逻辑控制。所有的中间件都定义在一个地方。

我这里就不讲述中间件和路由整合到http或者https大家可以看我之前写的关于Go语言的Http 中间件实现 这是我之前翻译的(译者)

这里我给大家展示几个路由的使用:

中间件加入到handler中:

英文原文链接:http://www.josephspurrier.com/go-web-app-example/

Go Web App Example – Entry Point, File Structure, Models, and Routes

有疑问加站长微信联系(非本文作者)

本文来自:谢权SELF

感谢作者:谢权

查看原文:Go Web App Example – Entry Point, File Structure, Models, and Routes

入群交流(和以上内容无关):加入Go大咖交流群,或添加微信:liuxiaoyan-s 备注:入群;或加QQ群:692541889

1199 次点击  
加入收藏 微博
暂无回复
添加一条新回复 (您需要 登录 后才能回复 没有账号 ?)
  • 请尽量让自己的回复能够对别人有帮助
  • 支持 Markdown 格式, **粗体**、~~删除线~~、`单行代码`
  • 支持 @ 本站用户;支持表情(输入 : 提示),见 Emoji cheat sheet
  • 图片支持拖拽、截图粘贴等方式上传