拆分时遇到问题在多个文件中转码

时间:2015-06-27 21:30:21

标签: go

我有两个文件main.gogroup.go ...它看起来像这样

package main

import (
    "github.com/gin-gonic/gin"
    "net/http"
)

func main() {
    // Creates a gin router with default middlewares:
    // logger and recovery (crash-free) middlewares
    router := gin.Default()

    v1 := router.Group("/v1")
    {
        v1.GET("/", func (c *gin.Context) {
            c.JSON(http.StatusOK, "{'sup': 'dup'}")
        })

        groups := v1.Group("/groups")
        {
            groups.GET("/", groupIndex)

            groups.GET("/:id", groupShow)
            groups.POST("/", groupCreate)
            groups.PUT("/:id", groupUpdate)
            groups.DELETE("/:id", groupDelete)
        }
    }

    // Listen and server on 0.0.0.0:8080
    router.Run(":3000")
}

所以方法groupIndexgroupCreategroupUpdate等位于routes/group.go

下的另一个文件中
package main

import (
  "strings"
  "github.com/gin-gonic/gin"
)


func groupIndex(c *gin.Context) {
  var group struct {
    Name string
    Description string
  }

  group.Name = "Famzz"
  group.Description = "Jamzzz"

  c.JSON(http.StatusOK, group)
}

func groupShow(c *gin.Context) {
  c.JSON(http.StatusOK, "{'groupShow': 'someContent'}")
}

func groupCreate(c *gin.Context) {
  c.JSON(http.StatusOK, "{'groupShow': 'someContent'}")
}

func groupUpdate(c *gin.Context) {
  c.JSON(http.StatusOK, "{'groupUpdate': 'someContent'}")
}

func groupDelete(c *gin.Context) {
  c.JSON(http.StatusOK, "{'groupDelete': 'someContent'}")
}

但是当我尝试编译时,我收到以下错误

stuff/main.go:21: undefined: groupIndex
stuff/main.go:23: undefined: groupShow
stuff/main.go:24: undefined: groupCreate
stuff/main.go:25: undefined: groupUpdate
stuff/main.go:26: undefined: groupDelete

我是新手,但我想如果你把文件放在同一个包中,那么他们就可以互相访问了。我在这做错了什么?

1 个答案:

答案 0 :(得分:2)

有两种方法可以解决这个问题:

  1. 将group.go移至与main.go相同的目录。
  2. 将group.go导入为包。将group.go上的包声明更改为:

    包裹路线//或您选择的名称

  3. 通过以大写字母开头来导出函数:

    func GroupIndex(c *gin.Context) {
    

    从main导入包:

     import "path/to/routes"
     ...
     groups.GET("/", routes.GroupIndex)
    

    文档How To Write Go Code解释了这一点以及更多内容。