golang实现iris框架最小功能的mvc
转载自:http://wwhl.wang/#/article?id=16
0.先安装安装iris库。
通过go get github.com/kataras/iris安装iris库,如下图
MVC是什么?
Model(模型):它是应用程序的主体部分,主要包括业务逻辑,数据操作和数据模型;
View(视图):用户与之交互的界面;
Controller(控制器):接收来自界面的请求并交给模型进行处理;
Iris实现MVC的目录结构:
datamodels:放所有的模型
repositories:数据库的增删改查抽象成一个数据库类,这些数据库类都放在这里,跟datamodels一一对应
services:业务逻辑代码放这里,跟datamodels中的文件一一对应
其中datamodels,repositories,services从概念上可以抽象为整个models。
web
----controllers:所有的控制器都放这里
----views:存放MVC所有模板结合golang的project目录规范,project需有pkg,bin,src目录,
main.go:入口文件,初始化项目,引导项目启动
现阶段整个project的目录如下图:
main.go代码如下:
package mainimport "github.com/kataras/iris"func main(){app := iris.New()app.Logger().SetLevel("debug")app.RegisterView(iris.HTML("./web/views",".html"))//注册控制器
//控制器此时暂未实现,后面补上app.Run(iris.Addr("localhost:8080"))
}
1.在datamodels下创建一个movie.go,其代码如下:
package datamodelstype Movie struct {Name string
}
2.实现其数据库相关操作
在repositories中创建一个movie_repository.go,其代码如下:
package repositoriesimport "datamodels"type MovieRepository interface {GetMovieName() string
}type MovieManager struct{
}func NewMovieManager() MovieRepository{return &MovieManager{}
}func (m *MovieManager) GetMovieName() string{//模拟赋值给模型,一般是从数据库获取数据movie := &datamodels.Movie{Name:"风语咒"}return movie.Name
}
3.创建movie_service.go文件,其代码如下:
package servicesimport ("fmt""repositories"
)type MovieService interface {ShowMovieName() string
}type MovieServiceManger struct {repo repositories.MovieRepository
}func NewMovieServiceManger(repo repositories.MovieRepository) MovieService{return &MovieServiceManger{repo:repo}
}func (m *MovieServiceManger) ShowMovieName() string{fmt.Println("我们获取到的视频名称为:" + m.repo.GetMovieName())return "我们获取到的视频名称为:" + m.repo.GetMovieName()
}
4.在目录views下创建文件夹movie,movie下创建index.html文件,其内容如下:
<h2>{{.}}</2>
5.在controllers目录下创建movie_controller.go文件,其代码如下:
package controllersimport ("github.com/kataras/iris/mvc""repositories""services"
)type MovieController struct {}func (c *MovieController) Get() mvc.View{movieReposiroty := repositories.NewMovieManager()movieService := services.NewMovieServiceManger(movieReposiroty)MoiveResult := movieService.ShowMovieName()return mvc.View{Name:"movie/index.html",Data:MoiveResult,}
}
6.在main.go中注册控制器,最终main.go的代码如下:
package mainimport ("github.com/kataras/iris""github.com/kataras/iris/mvc""web/controllers"
)func main(){app := iris.New()//设置日志级别app.Logger().SetLevel("debug")//注册控制器mvc.New(app.Party("hello")).Handle(new(controllers.MovieController))//注册模板目录,views目录下所有html文件都当成模板app.RegisterView(iris.HTML("D:/workspace/go/aigo-iris/src/web/views",".html"))app.Run(iris.Addr("localhost:8080"))
}
最终整个project的目录如下:
7.执行main.go文件,并在浏览器地址栏输入:http://localhost:8080/hello,正常的话,会出现如下图的界面
不过人家很正常的事情,在我这里总会遇到各种各样的问题,遇到的问题及解决方案如下:
一、各种依赖问题,如下图(只截部分依赖问题的图)
解决方案:
详见
golang实现iris框架最小功能的mvc相关推荐
- golang使用iris框架全局异常捕获
思路:通过设置recover可以实现异常自动回复功能,那么我们可以通过自定义recover去实现日志信息的返回 /** * @Description: 错误信息处理 * @Author: guoyzh ...
- 【Golang】IrIs框架 Hosts
监听服务 您可以启动服务器监听任何类型的net.Listener甚至http.Server实例. 服务器的初始化方法应该在最后通过Run函数传递. Go开发人员用于服务其服务器的最常用方法是传递&qu ...
- PHP简单实现MVC框架路由功能模式
说到使用PHP进行网站开发,自然离不开各种PHP的开发框架,开发框架为我们提供了灵活的开发方式,MVC层分离,业务解耦等等,让我们的开发更为快捷方便.但是很多人只是会使用框架,却从来不去了解框架的内部 ...
- 从零写一个具有IOC-AOP-MVC功能的框架---学习笔记---11. MVC功能之http请求处理器的编写---简易框架最后一公里!
从零写一个具有IOC-AOP-MVC功能的框架-学习笔记 专栏往期文章链接: IOC功能相关章节: 从零写一个具有IOC-AOP-MVC功能的框架-学习笔记-01.项目初始化 从零写一个具有IOC-A ...
- spring框架 web开发_go语言web开发框架:Iris框架讲解(一)
Golang介绍 Go语言是谷歌推出的一种全新的编程语言,可以在不损失应用程序性能的情况下降低代码的复杂性.谷歌首席软件工程师罗布派克(Rob Pike)说:我们之所以开发Go,是因为过去10多年间软 ...
- spring框架 web开发_go语言web开发框架学习:Iris框架讲解(一)
Golang介绍 Go语言是谷歌推出的一种全新的编程语言,可以在不损失应用程序性能的情况下降低代码的复杂性.谷歌首席软件工程师罗布派克(Rob Pike)说:我们之所以开发Go,是因为过去10多年间软 ...
- IRIS 框架学习一
IRIS 框架 1.介绍 用go语言开发web架构,速度最快的web框架. Iris是一款Go语言中用来开发web应用的框架,该框架支持编写一并在任何地方以最小的机器功率运行,如Android.ios ...
- Golang哪个Web框架好用?
框架一直是敏捷开发中的利器,能让开发者很快的上手并做出应用,甚至有的时候,脱离了框架,一些开发者都不会写程序了.成长总不会一蹴而就,从写出程序获取成就感,再到精通框架,快速构造应用,当这些方面都得心应 ...
- golang优秀开源框架和库
作者:承诺一时的美丽 链接:https://www.jianshu.com/u/6719426bf97e 來源:简书 音频和音乐 用于操纵音频的库. flac - Native Go FLAC解码器. ...
最新文章
- EJB究竟是什么,真的那么神奇吗??
- 10道关于Java泛型的面试题
- [密码学] 破解维吉尼亚密码
- 无法升级_Windows 10出现升级BUG:无法保留用户个人数据
- 安卓USB开发教程 六 安卓 AOA 2.0
- IDEA查看Java类的UML关系图
- GP学习(四)—Running a geoprocessing tool using background geoprocessing
- 02-02 Python 读写文件 open|os|sys
- 深度学习基础 | 从Language Model到RNN
- 使用nsenter进入Docker容器
- shellshock漏洞回顾
- ibm服务器刷主板系统,IBM X3850 X5服务器更换主板后修改主板信息
- 最近在用的一个跟单软件
- 对PHP中GD库的一些画图函数、及函数参数的学习总结(一)
- windows7家庭版,专业版,旗舰版,企业版版本区别
- 一步一步教你Win8专业版+U盘安装+kms激活
- 家庭局域网_玩转Windows 10家庭组,轻松共享局域网资源,人人都可以做到
- 测试点击屏幕次数的软件_红蜘蛛5校色仪怎么用?显示器校色及测试色域和色彩精准度详细教程...
- 【VMware16的安装以及安装Linux教程(超详细上)
- 用树莓派做一个语音机器人
热门文章
- 来来来,教你如何智慧薅羊毛!
- 欧盟人工智能立法提案的核心思想 及未来影响分析
- Linux操作系统应用实例_Discuz安装
- 1.5_18:鸡尾酒疗法(NOIP)
- 计算机科学速成课笔记(六):计算机的未来
- 值传递,地址传递,引用传递
- ubuntu找不到命令 add-apt-repository command not found
- ssm基于Html+css的音乐网站的设计与实现毕业设计源码181627
- 腾讯音乐回港上市,抖音取代网易云,成为腾讯音乐终极对手?
- 论文笔记-DeepLung: Deep 3D Dual Path Nets for Automated Pulmonary Nodule Detection and Classification