静态网站做新闻系统,上海seo优化培训机构,网站如何清除百度收录,网站建设出售拿到一个新框架大家可能无从下手#xff0c;因为你对框架设计思路、结构不了解#xff0c;从而产生恐惧#xff0c;所以我们框架是通过简单可视化界面安装#xff0c;安装后即可看到效果#xff0c;然后点击先点点看各个功能#xff0c;看现有的功能是怎么写的#xff0…拿到一个新框架大家可能无从下手因为你对框架设计思路、结构不了解从而产生恐惧所以我们框架是通过简单可视化界面安装安装后即可看到效果然后点击先点点看各个功能看现有的功能是怎么写的这个现成功能作为参考最好再自己写新的功能下面我们就带大家如何写新的功能。 
通过开发文档的必看章节我猜您已经在您电脑成功安装并成功运行项目了通过“开发必看”文档您已经对哦框架有所了解现在我们教你如何开发新的功能对应我们前后端分离框架来说后端写的功能都是提供给各个前端调用的api接口所以我们往后开发功能都称为新增“接口”。 
新增一个模块 
我们在app目录下新加一个模块当你下载新的代码安装后app目录下只有admin、business、common三个文件夹和controller.go一个文件其中controller.go是主控制器可以引入app下模块和设置全局路由拦截及请求前处理。我们用增加wxapp(微信应用模块)举例子开发步骤如下 
第1.新增一个目录 
在app下新建一个名称为 wxapp 的目录这名称就是这个模块的名称接口请求就是从wxapp开始也就是域名wxapp/例如https://goflys.cn/wxapp 
第2.在目录下添加控制器 
在wxapp 的目录中新建controller.go一个文件这个就是整个wxapp 模块的控制器代码如下 
package wxapp/**
* 引入控制器
* 请把您使用包用 _ gofly/app/wxapp/XX导入您编写的包 自动生成路由
* 不是使用则注释掉*/
import (gofly/utils/gf
)// 路由中间件/路由钩子
func RouterHandler(c *gf.GinCtx, IsCtr bool) {if IsCtr { //在这里面处理拦截操作c.Next()}
} 
新建好的控制器文件后要不这个模块添加到app下的controller.go主控制中并且引入模块路由中间件如果模块不需拦截则可以不引入代码如下 
package controller/**
* app路由引入口《引入模块控制器》
*
* 请把您使用包用 _ gofly/app/xx导入您编写的包 自动生成路由
* 不需要使用的模块则注释掉 例如home模块暂时用不到就注释掉这样不占用资源使用是取消注释即可。
* 路由规则包路径“business/article”  包中结构体“Cate”转小写方法名(首字母转小写_ gofly/app/business
* 有控制的模块请在RouterHandler添加模块的路由钩子*/
import (gofly/app/admingofly/app/business_ gofly/app/commongofly/app/wxapp //新增的wxapp模块gofly/utils/gf
)// 路由中间件/路由钩子
func RouterHandler(c *gf.GinCtx) {business.RouterHandler(c, gf.IsModelPath(c.FullPath(), business))admin.RouterHandler(c, gf.IsModelPath(c.FullPath(), admin))wxapp.RouterHandler(c, gf.IsModelPath(c.FullPath(), wxapp))//新增的wxapp模块
} 
第3.在wxapp目录下创建接口文件夹 
我们在wxapp模块创建名称user的用户相关接口类和用户相关的接口将在user目录下添加比如user中常见的用户基本操作登录获取用户信息、用户订单等我们下面从用户操作和用户订单给大家举例。这个类名user也会生成路由路径到这里路由为/wxapp/user加上域名则为https://goflys.cn/wxapp/user。我们框架会自动根据目录层级生成接口请求路径这样路由就不用你手动编写且不会出现路由重复、命名更规则、可以根据请求的接口路径快速定位代码位置方便更新代码。 
第4.在user目录下创建接口文件 
我们创建index.go来写用户常见操作创建order.go来写用户订单相关功能我们通过index.go和order.go两个给大家讲解接口index,go中比较特殊框架为了减少路由层级框架对index命名的文件在生成路由是会忽略index这一级生成路由为/wxapp/user/接口名称。其他命名路由会添加文件名例如order.go生成路由为/wxapp/user/order/接口名称。index常用在与类名意义相同的功能上类型本例user类的用户登录、获取用户信息等是和User类名称对应的功能所以我们把用户登录、获取用户信息等用户操作功能放到index.go中这样生成路由基于没有index这一层。 
创建接口文件后我们在把user类在wxapp模块控制器引入就是在app/wxapp/controller.go中import一下user引入类的代码如下 
package wxapp/**
* 引入控制器
* 请把您使用包用 _ gofly/app/wxapp/XX导入您编写的包 自动生成路由
* 不是使用则注释掉*/
import (_ gofly/app/wxapp/user //这个就是新引入的 user类gofly/utils/gf
)// 路由中间件/路由钩子
func RouterHandler(c *gf.GinCtx, IsCtr bool) {if IsCtr { //在这里面处理拦截操作c.Next()}
} 
4.1 新增index.go文件 
示例我只写接口方法接口业务这里就不详细展开您自己根据业务编写index.go示例代码如下 
package userimport gofly/utils/gf// 用户
type Index struct{}func init() {fpath : Index{}gf.Register(fpath, fpath)
}// 获取用户信息
func (api *Index) GetInfo(c *gf.GinCtx) {user_id, _ : c.Get(userID) //当前用户IDuserdata, err : gf.Model(business_user).Fields(id,businessID,name,nickname,mobile,email,avatar,status,createtime).Where(id, user_id).Find()if err ! nil {gf.Failed().SetMsg(查找用户数据).Regin(c)} else {gf.Success().SetMsg(获取用户信息).SetData(userdata).Regin(c)}
}// 用户登录
func (api *Index) Login(c *gf.GinCtx) {//更具登录业务写登录功能gf.Success().SetMsg(用户登录).Regin(c)
} 
到这里我们就看到终端看到GetInfo和Login两个接口注册到路由中了您可以通过域名服务端地址/wxapp/user/getInfo请求接口了。例如下图大家可能疑问为什么GetInfo会生成为GET请求、Login又会是POST请已经为何首字母变小写这问题请去接口开发规范 这一节了解。 4.2 新增order.go文件 
在user目录下创建order.go文件package包名是类目录名user个必须规范order.go基本代码如下 
package userimport gofly/utils/gf// 用户订单
type Order struct{}func init() {fpath : Order{}gf.Register(fpath, fpath)
} 
其中代码的结构体type Order struct{} 的Order名称要和order.go文件名一致并且把首字母变大写。init函数中fpath : Order{} 的Order就是是结构体名称每个文件要写成和文件名称一样。 
下面在order中添加功能接口我们就添加一个获取订单列表GetList、获取订单详情GetDetail和修改订单状态UpStatus取消订单、确认订单3个接口做演示。代码如下 
package userimport (gofly/utils/gfgofly/utils/tools/gmap
)// 用户订单
type Order struct{}func init() {fpath : Order{}gf.Register(fpath, fpath)
}// 获取订单列表
func (Order) GetList(c *gf.GinCtx) {pageNo : gf.Int(c.DefaultQuery(page, 1))pageSize : gf.Int(c.DefaultQuery(pageSize, 10))//搜索添条件param, _ : gf.RequestParam(c)whereMap : gmap.New()if gf.DbHaseField(business_ordermanage, businessID) {whereMap.Set(businessID, c.GetHeader(Businessid))}user, err : gf.ParseTokenGetInfo(c)if err ! nil {gf.Failed().SetMsg(登录失效请重新登录).SetCode(401).SetData(err).Regin(c)}whereMap.Set(uid, user.ID)if title, ok : param[title]; ok  title !  {whereMap.Set(title like ?, %gf.String(title)%)}MDB : gf.Model(business_order).Where(whereMap)totalCount, _ : MDB.Clone().Count()list, err : MDB.Fields(id,uid,title,status,createtime,updatetime).Page(pageNo, pageSize).Order(id desc).Select()if err ! nil {gf.Failed().SetMsg(err.Error()).Regin(c)} else {gf.Success().SetMsg(获取全部列表).SetData(gf.Map{page:     pageNo,pageSize: pageSize,total:    totalCount,items:    list}).Regin(c)}
}// 获取订单详情
func (Order) GetDetail(c *gf.GinCtx) {id : c.DefaultQuery(id, )if id   {gf.Failed().SetMsg(请传参数订单id).Regin(c)} else {data, err : gf.Model(business_order).Where(id, id).Fields(id,uid,title,status,createtime,updatetime).Find()if err ! nil {gf.Failed().SetMsg(获取内容失败).SetData(err).Regin(c)} else {gf.Success().SetMsg(获取订单详情).SetData(data).Regin(c)}}
}// 更新订单状态
func (Order) UpStatus(c *gf.GinCtx) {param, _ : gf.RequestParam(c)res, err : gf.Model(business_order).Where(id, param[id]).Data(gf.Map{status: param[status]}).Update()if err ! nil {gf.Failed().SetMsg(更新失败).SetData(err).Regin(c)} else {msg : 更新成功if res  nil {msg  暂无数据更新}gf.Success().SetMsg(msg).SetData(res).Regin(c)}
} 
我们会在终端看到GetList、GetDetail、UpStatus生成请求路由了也就是可以调用这些接口如下图 我们细心的朋友可能发现func 的函数前有个括号index和order两个写法不一样这样我们和大家说明一下func (Order) GetList(c *gf.GinCtx) {}中(Order)可以写成func (api *Order) GetList(c *gf.GinCtx) {}这种。func (Order)和func (api *Order)两种在我们示例都可以正常运行写成func (Order)可以减少点代码如果您写的业务有连锁操作需求再func (api *Order)这样通api去操作结构体内的变量值等操作。所以用不到api是可以省略当然你留着也没有影响。 
到此您就学会了使用框架新增功能了同样的需要再现有的admin和business模块新增类或者一个接口也是同样操作您就自己举一反三自己动手试试反复写几次让自己对框架有深入了解千万别急躁慢慢来要自己多去探索形成自学习惯。  文章转载自: http://www.morning.xqjz.cn.gov.cn.xqjz.cn http://www.morning.ptslx.cn.gov.cn.ptslx.cn http://www.morning.mqwdh.cn.gov.cn.mqwdh.cn http://www.morning.nytqy.cn.gov.cn.nytqy.cn http://www.morning.ywxln.cn.gov.cn.ywxln.cn http://www.morning.zmlnp.cn.gov.cn.zmlnp.cn http://www.morning.bdgb.cn.gov.cn.bdgb.cn http://www.morning.ytfr.cn.gov.cn.ytfr.cn http://www.morning.nppml.cn.gov.cn.nppml.cn http://www.morning.fcwb.cn.gov.cn.fcwb.cn http://www.morning.ghrlx.cn.gov.cn.ghrlx.cn http://www.morning.nthyjf.com.gov.cn.nthyjf.com http://www.morning.fylqz.cn.gov.cn.fylqz.cn http://www.morning.wschl.cn.gov.cn.wschl.cn http://www.morning.nqrfd.cn.gov.cn.nqrfd.cn http://www.morning.jpjxb.cn.gov.cn.jpjxb.cn http://www.morning.zqwp.cn.gov.cn.zqwp.cn http://www.morning.kjgdm.cn.gov.cn.kjgdm.cn http://www.morning.ypdmr.cn.gov.cn.ypdmr.cn http://www.morning.nbrdx.cn.gov.cn.nbrdx.cn http://www.morning.lhjmq.cn.gov.cn.lhjmq.cn http://www.morning.hffjj.cn.gov.cn.hffjj.cn http://www.morning.xskbr.cn.gov.cn.xskbr.cn http://www.morning.kpfds.cn.gov.cn.kpfds.cn http://www.morning.wwklf.cn.gov.cn.wwklf.cn http://www.morning.kgfsz.cn.gov.cn.kgfsz.cn http://www.morning.nbgfz.cn.gov.cn.nbgfz.cn http://www.morning.thzwj.cn.gov.cn.thzwj.cn http://www.morning.lywys.cn.gov.cn.lywys.cn http://www.morning.jokesm.com.gov.cn.jokesm.com http://www.morning.kqglp.cn.gov.cn.kqglp.cn http://www.morning.jwtjf.cn.gov.cn.jwtjf.cn http://www.morning.jcwrb.cn.gov.cn.jcwrb.cn http://www.morning.ckctj.cn.gov.cn.ckctj.cn http://www.morning.mzwqt.cn.gov.cn.mzwqt.cn http://www.morning.xckdn.cn.gov.cn.xckdn.cn http://www.morning.sypzg.cn.gov.cn.sypzg.cn http://www.morning.rgrz.cn.gov.cn.rgrz.cn http://www.morning.qpzjh.cn.gov.cn.qpzjh.cn http://www.morning.gczzm.cn.gov.cn.gczzm.cn http://www.morning.bsqkt.cn.gov.cn.bsqkt.cn http://www.morning.ntzfj.cn.gov.cn.ntzfj.cn http://www.morning.mlnzx.cn.gov.cn.mlnzx.cn http://www.morning.msgcj.cn.gov.cn.msgcj.cn http://www.morning.ftrpvh.cn.gov.cn.ftrpvh.cn http://www.morning.qgqck.cn.gov.cn.qgqck.cn http://www.morning.mkczm.cn.gov.cn.mkczm.cn http://www.morning.pbwcq.cn.gov.cn.pbwcq.cn http://www.morning.zlhbg.cn.gov.cn.zlhbg.cn http://www.morning.wkws.cn.gov.cn.wkws.cn http://www.morning.zrqs.cn.gov.cn.zrqs.cn http://www.morning.xsqbx.cn.gov.cn.xsqbx.cn http://www.morning.yqgbw.cn.gov.cn.yqgbw.cn http://www.morning.xplng.cn.gov.cn.xplng.cn http://www.morning.nynlf.cn.gov.cn.nynlf.cn http://www.morning.ltpph.cn.gov.cn.ltpph.cn http://www.morning.pgzgy.cn.gov.cn.pgzgy.cn http://www.morning.tfpmf.cn.gov.cn.tfpmf.cn http://www.morning.mjqms.cn.gov.cn.mjqms.cn http://www.morning.fbzdn.cn.gov.cn.fbzdn.cn http://www.morning.txlxr.cn.gov.cn.txlxr.cn http://www.morning.zcrjq.cn.gov.cn.zcrjq.cn http://www.morning.pcgjj.cn.gov.cn.pcgjj.cn http://www.morning.xzsqb.cn.gov.cn.xzsqb.cn http://www.morning.wglhz.cn.gov.cn.wglhz.cn http://www.morning.wtcyz.cn.gov.cn.wtcyz.cn http://www.morning.cfccp.cn.gov.cn.cfccp.cn http://www.morning.dnls.cn.gov.cn.dnls.cn http://www.morning.hlppp.cn.gov.cn.hlppp.cn http://www.morning.jbpodhb.cn.gov.cn.jbpodhb.cn http://www.morning.ntnml.cn.gov.cn.ntnml.cn http://www.morning.mqlsf.cn.gov.cn.mqlsf.cn http://www.morning.kwrzg.cn.gov.cn.kwrzg.cn http://www.morning.wflpj.cn.gov.cn.wflpj.cn http://www.morning.tkrpt.cn.gov.cn.tkrpt.cn http://www.morning.zxqyd.cn.gov.cn.zxqyd.cn http://www.morning.wdxr.cn.gov.cn.wdxr.cn http://www.morning.fhjnh.cn.gov.cn.fhjnh.cn http://www.morning.twpq.cn.gov.cn.twpq.cn http://www.morning.nqwz.cn.gov.cn.nqwz.cn