代码如下:
package main
import (
"irisWeb/config"
"irisWeb/controller"
"irisWeb/datasource"
"irisWeb/model"
"irisWeb/service"
"irisWeb/utils"
"time"
"github.com/kataras/iris/v12"
"github.com/kataras/iris/v12/context"
"github.com/kataras/iris/v12/mvc"
"github.com/kataras/iris/v12/sessions"
)
func main() {
app := newApp()
//应用App设置
ConfigAction(app)
//路由设置
mvcHandle(app)
config := config.InitConfig()
addr := ":" + config.Port
app.Run(
iris.Addr(addr), //在端口8080进行监听
iris.WithoutServerError(iris.ErrServerClosed), //无服务错误提示
iris.WithOptimizations, //对json数据序列化更快的配置
)
}
//构建App
func newApp() *iris.Application {
app := iris.New()
//设置日志级别 开发阶段为debug
app.Logger().SetLevel("debug")
//注册静态资源
app.HandleDir("/static", "./static")
app.HandleDir("/manage/static", "./static")
app.HandleDir("/img", "./uploads")
//注册视图文件
app.RegisterView(iris.HTML("./static", ".html"))
app.Get("/", func(context context.Context) {
context.View("index.html")
})
return app
}
/**
* MVC 架构模式处理
*/
func mvcHandle(app *iris.Application) {
//启用session
sessManager := sessions.New(sessions.Config{
Cookie: "sessioncookie",
Expires: 24 * time.Hour,
})
//获取redis实例
redis := datasource.NewRedis()
//设置session的同步位置为redis
sessManager.UseDatabase(redis)
//实例化mysql数据库引擎
engine := datasource.NewMysqlEngine()
//用户功能模块
userService := service.NewUserService(engine)
user := mvc.New(app.Party("/v1/users/"))
user.Register(userService, sessManager.Start)
user.Handle(new(controller.UserController))
//获取用户详细信息
app.Get("/v1/user/{user_name}", func(context context.Context) {
userName := context.Params().Get("user_name")
var user model.User
_, err := engine.Where("user_name=?", userName).Get(&user)
if err != nil {
context.JSON(iris.Map{
"status": utils.RECODE_FAIL,
"type": utils.RESPMSG_ERROR_USERINFO,
"message": utils.Recode2Text(utils.RESPMSG_ERROR_USERINFO),
})
} else {
context.JSON(user)
}
})
}
/**
* 项目设置
*/
func ConfigAction(app *iris.Application) {
//配置 字符编码
app.Configure(iris.WithConfiguration(iris.Configuration{
Charset: "UTF-8",
}))
//错误配置
//未发现错误
app.OnErrorCode(iris.StatusNotFound, func(context context.Context) {
context.JSON(map[string]interface{}{
"errmsg": iris.StatusNotFound,
"msg": " not found ",
"data": iris.Map{},
})
})
//错误配置
//服务器内部错误
app.OnErrorCode(iris.StatusInternalServerError, func(context context.Context) {
context.JSON(map[string]interface{}{
"errmsg": iris.StatusInternalServerError,
"msg": " interal error ",
"data": iris.Map{},
})
})
}
执行后报错:
package irisWeb/controller is not in GOROOT (/usr/local/go/src/irisWeb/controller)
原因是使用go mod 管理各种依赖,当导入自己定义的包的时候,需要从go.mod文件作为绝对路径import。并且路径开头应该是module名,不是目录名
例如下面的是我们的项目目录:
目录
这是我当前的目录结构,可以看到,在 SimpleBlog 目录下面是go.mod文件,打开代码如下:
module main
go 1.14
require (
github.com/go-sql-driver/mysql v1.5.0
github.com/go-xorm/xorm v0.7.
github.com/kataras/iris/v12 v12.1.8
github.com/shurcooL/sanitized_anchor_name v1.0.0 // indirect
github.com/smartystreets/goconvey v1.6.4 // indirect
xorm.io/builder v0.3.7 // indirect
xorm.io/core v0.7.3 // indirect
)
这是因为我们使用go mod初始化过:
$ go mod init main
go: creating new go.mod: module main
我现在的 module 名是 main, 而目录名是 iriwWeb,在 main.go 里,我需要引入 controller 目录下自定义的包,此时在 main.go 里,需要import "main/controller",而不是import "irisWeb/routers",所以上面的引用需要修改为以下代码:
import (
"main/config"
"main/controller"
"main/datasource"
"main/model"
"main/service"
"main/utils"
"time"
"github.com/kataras/iris/v12"
"github.com/kataras/iris/v12/context"
"github.com/kataras/iris/v12/mvc"
"github.com/kataras/iris/v12/sessions"
)
网友评论