【问题标题】:How to import local package to package main如何将本地包导入主包
【发布时间】:2019-12-26 11:56:58
【问题描述】:

我尝试重构 main.go 并将代码分成不同的文件。
所以我把 controller.go 作为包控制器。
但我无法将此本地包导入 main.go。

article
  ├ client
  ├ api
  │  ├ main.go
  │  └ contoroller
  │       └ contoroller.go
  ├ nginx
  └ docker-compose.yml
・client: react/axios
・api: golang/gin
・web-server: nginx
・db: mysql
・container: docker
・ci-tool: travis
・deploy: aws elastic beanstalk

main.go

package main

import (

"./contoroller"
)

    controller := controller.controller{}

    api := router.Group("/api")
    {
        api.GET("/articles", func(c *gin.Context) {
            controller.getArticleController(c, db)
        })
    }

    router.Run(":2345")
}

controller.go

package controller

import (
)

func getArticleController(c *gin.Context, db *sql.DB) {
}

我希望导入包控制器。
但实际并非如此。

undefined: controller

【问题讨论】:

  • 导入后只能访问包中导出的元素。您的 controller 未导出。尽管如此:您应该绝不使用本地导入。请阅读并坚持“如何编写 Go 代码”。
  • 这就是@Volker 所指的:golang.org/doc/code.html

标签: go


【解决方案1】:

我通过将article 复制到$GOPATH/src/github.com/[user]/ 来解决此问题

【讨论】:

    【解决方案2】:

    如果你想在包外使用函数你必须重命名对象。第一个字母应该大写,你的代码应该是下一个

    package main
    
    import (
    
    "./contoroller"
    )
    
    api := router.Group("/api")
    {
        api.GET("/articles", func(c *gin.Context) {
            controller.GetArticleController(c, db)
        })
    }
    
    router.Run(":2345")
    

    }

    控制器

    package controller
    
    import (
    )
    
    func GetArticleController(c *gin.Context, db *sql.DB) {
    }
    

    【讨论】:

    • 您的第一个示例代码无效,所有代码在函数体之外都是非法的。
    • 此代码仅基于您的示例(有很多类型和无效使用)。 O 不要认为你在实际项目中使用它。它看起来像有错误的逻辑原型。你应该把它添加到主函数中。
    猜你喜欢
    • 2023-02-09
    • 1970-01-01
    • 2021-09-16
    • 1970-01-01
    • 2016-05-30
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-09-12
    相关资源
    最近更新 更多