英文:
Having trouble splitting go code in multiple files
问题
我有两个文件main.go和group.go...大致如下所示:
package main
import (
	"github.com/gin-gonic/gin"
	"net/http"
)
func main() {
	// 创建一个带有默认中间件(logger和recovery)的gin路由器
	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)
		}
	}
	// 监听并在0.0.0.0:8080上提供服务
	router.Run(":3000")
}
所以groupIndex、groupCreate、groupUpdate等方法位于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
我对Go语言非常陌生,但我认为如果将文件放在同一个包中,它们应该可以相互访问。我在这里做错了什么?
英文:
I have two files main.go and group.go... it looks something like this
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")
}
So the methods groupIndex, groupCreate, groupUpdate, etc are located in another file under 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'}")
}
But when I try to compile I get the following error
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
I'm super new to go, but I thought if you put files in the same package, then they'll have access to each other. What am I doing wrong here?
答案1
得分: 3
有两种方法可以修复这个问题:
- 
将group.go移动到与main.go相同的目录中。
 - 
将group.go作为一个包导入。将group.go中的包声明改为:
package routes // 或者你选择的名称
 
通过以大写字母开头来导出函数:
func GroupIndex(c *gin.Context) {
从main中导入该包:
 import "path/to/routes"
 ...
 groups.GET("/", routes.GroupIndex)
文档如何编写Go代码对此进行了更详细的解释。
英文:
There are two ways to fix this:
- 
Move group.go to the same directory as main.go.
 - 
Import group.go as a package. Change the package declaration on group.go to:
package routes // or the name of your choice
 
Export the functions by starting them with a capital letter:
func GroupIndex(c *gin.Context) {
Import the package from main:
 import "path/to/routes"
 ...
 groups.GET("/", routes.GroupIndex)
The document How To Write Go Code explains this and more.
通过集体智慧和协作来改善编程学习和解决问题的方式。致力于成为全球开发者共同参与的知识库,让每个人都能够通过互相帮助和分享经验来进步。


评论