GoLang自定义包导入问题

i5desfxk  于 2023-04-18  发布在  Go
关注(0)|答案(2)|浏览(187)

我在学围棋,遇到了一个问题。
我用go mod init main创建了mod文件
接下来,我创建了控制器和路由文件夹,看起来像下面这样:

├── contollers
│   └── users.controller.go
├── routes
│   ├── index.go
│   └── users.routes.go
├── vendor
│   └── modules.txt
├── go.mod
├── go.sum
└── main.go

在mod文件中,模块看起来像这样的module main
现在当我试图将控制器导入路由器时,它会给我导入错误。
我一直在做下面的事情。尝试-1

import (
    "$GOPATH/controllers"

    "github.com/gin-gonic/gin"
)

它给出了invalid import path: "$GOPATH/controllers"syntax错误
尝试-2

import (
    "$GOPATH/main/controllers"

    "github.com/gin-gonic/gin"
)

错误也是一样的
尝试-3

import (
    "main/controllers"

    "github.com/gin-gonic/gin"
)

controller.go

package controllers;

import (
    "fmt"

    "github.com/gin-gonic/gin"
)

func HealthCheck() gin.HandlerFunc {
    return func (c *gin.Context)  {
        fmt.Println("reached controller")
    }
}

router.go

package routes

import (
    "bootcamp.com/server/controllers"

    "github.com/gin-gonic/gin"
)

func UserRouters(inComingRoutes *gin.Engine) {
    inComingRoutes.GET("/api/health", controllers.HealthCheck());
}

它会抛出这样的错误,could not import main/controllers (no required module provides package "main/controllers")
我一直坚持与此3-4个小时,任何人都可以请建议我如何可以导入该控制器到我的路线。
先谢谢你了。

yvfmudvl

yvfmudvl1#

1.通过编辑go.mod修改模块路径:

- module main
+ module example.com/hello

1.修改导入路径:

import (
-     "main/controllers"
+     "example.com/hello/controllers"

      "github.com/gin-gonic/gin"
  )
  1. controller.go(删除尾部;):
- package controllers;
+ package controllers

1.将目录contollers重命名为controllers以匹配软件包名称(缺少r)。
1.删除vendor文件夹。

说明

  1. main在go中有特殊的含义。引用golang规范:
    一个完整的程序是通过将一个名为 main package 的未导入的包与它导入的所有包进行传递链接而创建的。main package必须具有包名main并声明一个不带参数且不返回值的函数main。
    1.不带点的导入路径保留给标准库和go工具链。参见cmd/go: document that module names without dots are reserved
hpxqektj

hpxqektj2#

使用此命令

go mod tidy

修改你的用户,路线,开始

package routes

import (
    "main/contollers"

    "github.com/gin-gonic/gin"
)

func UserRouters(inComingRoutes *gin.Engine) {
    inComingRoutes.GET("/api/health", controllers.HealthCheck())
}

相关问题