美文网首页
03、package irisWeb/controller is

03、package irisWeb/controller is

作者: 日落_3d9f | 来源:发表于2020-05-03 22:54 被阅读0次

    代码如下:

    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"
    )
    

    相关文章

      网友评论

          本文标题:03、package irisWeb/controller is

          本文链接:https://www.haomeiwen.com/subject/cphsghtx.html