golang web php,GitHub - kai-xx/goWeb: golang web 接口实现 -- 类似PHP的laravel

goWeb

gorose orm+dotweb框架实现接口 -- 类似PHP的laravel

项目结构说明

因为 gorose orm 和 dotweb 框架 都是基于独立的组件, 所以我们可以对项目的目录做出自由的规划.

在这里, 我们便规划一个遵循一般的mvc结构的项目目录.

为了项目的易维护性和高可用性, 我们尽量采取成熟的架构, 分离业务模块, 这里就借鉴 php 界最火爆的框架拉 laravel 的设计思想, 做出简单的涉设计架构

目录大致如下:

路由: /router/

放置所有路由, 这里会用到dotweb的路由组件, 所有请求的入口都会经过这里

控制器: /controller/

放置所有控制器, 这里就是基本的业务逻辑处理曾

数据操作: /model/

放置所有model, 这里就是gorose orm的主战场, 所有的数据库操作都在这里完成

中间件: /middleware/

放置所有中间件, 这里可以放置各种狂拽酷炫吊炸天的组件

入口目录: /bootstrap/

系统中用到的组件, 统一在这里驱动, 便于维护管理, 本项目主要包含gorose和dotweb在这里驱动

配置目录: /config/

必须是放置所有的配置文件在这里

日志目录: /log/

这个没什么说的

成型目录结构

goWeb

bootstrap

bootDatabase.go

bootRouter.go

config

database.go

middleware

Auth.go

controller

Goods.go

model

Goods.go

router

route.go

main.go

以上各个组件, 除了model模块采用gorose的orm组件之外, 路由和部分中间件模块均由dotweb中对应的组件来完成, 这里就更能提现出组件化框架dotweb的强大之处了

路由说明

这里用到了 dotweb 的相关组件, 有 HttpServer , Context 和 cors 中间件

他们分别作用于 路由, 请求参数等相关和中间件(比如跨域) 等

Route.GET 代表该请求位 get 请求

Route.POST 代表该请求位 post 请求

Route.Group 将请求归类

Route.Group.Use 使用中间件

option 中间件初始化

cors.Middleware(option) 加载中间件option

controller.xxxxx 加载控制器的对应方法

控制器和模型说明

// 控制器

func GetGoodsById(context dotweb.Context) error {

res := model.GetGoodsById(context)

ctx.WriteJson(utils.SuccessReturn(res))

return nil

}

说明:

context 请求的内容

context.WriteJson 返回 json 格式数据

utils.SuccessReturn 工具包中封装的成功返回函数

model 引入的模型目录, 内容如下:

// 模型

func GetGoodsById(context dotweb.Context) interface{} {

res, err := bootstrap.DB.Table("goods").

Where("id", context.FormValue("id")).

First()

if err != nil {

return ""

}

return res

}

测试

启动服务

go run main.go

出现如下信息

start……,port:8099,visit:http://localhost:8099

部署上线

打包项目

go build main.go

运行项目

nohup ./main &

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/337820.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

jboss项目导入idea_JBoss BPM Suite快速指南–将外部数据模型导入BPM项目

jboss项目导入idea您正在从事一个大项目,在企业中开发规则,事件和流程以满足关键业务需求。 部分要求指出,某个业务部门将提供您的数据模型供您利用。 不会在JBoss BPM Suite数据建模器中设计此数据模型,但是在从业务中心仪表板…

mysql协议重传,MySQL · 源码分析 · 网络通信模块浅析

MySQL 网络通信浅析MySQL的网络通信协议主要包含以下几个层次,从最上层的MySQL数据包协议层到最底层的socket传输:| THD| Protocol| NET| VIO| SOCKET本文主要扫一下相关的代码,以下分析基于MySQL5.7。创建会话在MySQL5.7中对会话协议层的代码…

C语言代码优化11种实用方法

点击蓝字关注我1、选择合适的算法和数据结构选择一种合适的数据结构很重要,如果在一堆随机存放的数中使用了大量的插入和删除指令,那使用链表要快得多。数组与指针语句具有十分密切的关系,一般来说,指针比较灵活简洁,而…

spring boot注释_使用Spring Boot和注释支持配置Spring JMS应用程序

spring boot注释1.简介 在以前的文章中,我们学习了如何使用Spring JMS配置项目。 如果查看有关使用Spring JMS进行消息传递的文章介绍 ,您会注意到它是使用XML配置的。 本文将利用Spring 4.1版本中引入的改进 ,并仅使用Java config配置JMS项目…

obendclean php命令,ob_end_clean

用户评论:[#1]Sam Yong - hellclanner at live dot com [2011-05-04 22:14:35]Take note that if you change zlib output compression setting in between ob_start and ob_end_clean or ob_end_flush, you will get an error: ob_end_flush() failed to delete buffer zlib o…

C语言 | 简单工厂方法模式实现例子

点击蓝字关注我们1、简介简单工厂方法定义一个用于创建对象的类,该类接受一个参数,通过参数决定创建不同的对象。GOF并没有把简单工厂方法定义为23种设计模式之一,可以认为简单工厂方法是工厂方法的简化形式。为了体现简单工厂方法和工厂方法…

grpc 流式传输_编写下载服务器。 第一部分:始终流式传输,永远不要完全保留在内存中...

grpc 流式传输下载各种文件(文本或二进制文件)是每个企业应用程序的生死攸关的事情。 PDF文档,附件,媒体,可执行文件,CSV,超大文件等。几乎每个应用程序迟早都必须提供某种形式的下载。 下载是通…

matlab plot errorbar,如何为MATLAB errorbar plot的点和垂直线设置不同的图例?

这建立在Jens Boldsen’s answer之上,它添加了以下内容:>可以旋转表示图例中错误栏的线条使其垂直,或保持默认的水平方向;>该行的末尾用短线“关闭”.该方法非常通用,因为它支持:>任意颜色,线型和标记作为错误栏的参数.请注意,实际条形图始终绘…

C语言 / C++基础面试知识大集合

点击蓝字关注我们相对而言,C语言和C相关的面试题比较少见,没有Java方向写的人那么多,这是一篇 C 语言与 C面试知识点总结的文章,个人感觉非常难得,希望能对大家有所帮助。const作用修饰变量,说明该变量不可…

input发送a.jax_Java REST JAX-RS 2.0 –如何处理日期,时间和时间戳记数据类型

input发送a.jax无论是X-Form-Urlencoded还是JSON HTTP发布到REST资源端点,对于与日期或时间相关的数据都没有特定的“数据类型”。 大多数开发人员会将这些数据发布为“字符串”,或者只是将它们转换为Unix时间戳值(例如1435061152&#xff09…

php中is_int用法,php – is_int()和ctype_digit()之间有区别吗?

如果参数是整数类型,is_int()返回true,ctype_digit()采用字符串参数,如果字符串中的所有字符都是数字,则返回true。例:┌──────────┬───────────┬────────────────┐│ │ is_…

jooq sql_jOOQ星期二:Vlad Mihalcea深入了解SQL和Hibernate

jooq sql欢迎来到jOOQ Tuesdays系列。 在本系列文章中,我们每隔一个月的第三个星期二发布一篇文章,从jOOQ的角度采访我们发现该行业令人兴奋的人。 这包括从事SQL,Java,开放源代码以及各种其他相关主题的人员。 我们很高兴在第三…

C语言灵魂拷问:++i 为比 i++效率高?

点击蓝字关注我们相信很多人遇到过这样的问题:printf("%d,%d",i,i);也纠结过这个问题,到底答案是什么。确没有一个参考的资料。唯一知道的是,几乎所有C语言教材都这么讲:i就是先使用i的值再使i自身加一,而i则…

HibernateNONSTRICT_READ_WRITE CacheConcurrencyStrategy如何工作

介绍 在我以前的文章中 ,我介绍了READ_ONLY CacheConcurrencyStrategy ,这是不可变实体图的显而易见的选择。 当高速缓存的数据可变时,我们需要使用读写高速缓存策略,本文将介绍NONSTRICT_READ_WRITE二级高速缓存的工作方式。 内…

502无法解析服务器标头_编写下载服务器。 第三部分:标头:内容长度和范围...

502无法解析服务器标头这次,我们将探索更多HTTP请求和响应标头,以改善下载服务器的实现: Content-length和Range 。 前者表示下载量很大,后者允许部分下载文件,或者从我们开始的地方失败后继续下载。 Content-length响…

支付宝pc支付php,laravel框架下的pc支付宝支付接入

Time: 14:22*/return [//pc配置pcconfig>[partner >2088302186611, //这里是你在成功申请支付宝接口后获取到的PID;key >sxevk9h1vekjlx4y12arl6pryrz111, //这里是你在成功申请支付宝接口后获取到的Keyseller_id >208830211, //就是partnersign_type &…

最全,面中率最高的C++经典面试题分享!

点击蓝字关注我们1.new、delete、malloc、free关系delete会调用对象的析构函数,和new对应free只会释放内存,new调用构造函数。malloc与free是C/C语言的标准库函数,new/delete是C的运算符。它们都可用于申请动态内存和释放内存。对于非内部数据类型的对象…

mysql不同版本会覆盖吗,[mysql不同版本数据库同步]mysql数据库主从同步,master和slave上的mysql必须版本一样吗,如果不一样会有什么结果?...

在线QQ客服:1922638专业的SQL Server、MySQL数据库同步软件497950890Slave_SQL_Running: No mysql同步故障解决如果数据不同步可以尝试该资料mysql> show slave status\GSlave_IO_Running: YesSlave_SQL_Running: NoLast_Errno: 1062….Seconds_Behind_Master:NU…

不可变集合相比可变集合_简单的基准测试:不可变集合VS持久集合

不可变集合相比可变集合通常,您需要向集合中添加新元素。 因为您是一个优秀而谨慎的开发人员,所以您希望尽可能保持不变。 因此,向不可变集合中添加新元素将意味着您必须创建一个新的不可变集合,其中包含原始集合的所有元素以及新…

C++ 面试被问到的“左值引用和右值引用”

点击蓝字关注我们1.左值和右值在C11中可以取地址的、有名字的就是左值,反之,不能取地址的、没有名字的就是右值(将亡值或纯右值)。举个例子,int a bc, a 就是左值,其有变量名为a,通过&a可以…