转载自: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 main
import "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 datamodels
type Movie struct {
Name string
}
2.实现其数据库相关操作
在repositories中创建一个movie_repository.go,其代码如下:
package repositories
import "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 services
import (
"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 controllers
import (
"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 main
import (
"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,正常的话,会出现如下图的界面
不过人家很正常的事情,在我这里总会遇到各种各样的问题,遇到的问题及解决方案如下:
一、各种依赖问题,如下图(只截部分依赖问题的图)
解决方案:
详见