gpt4 book ai didi

go - 从子目录访问函数

转载 作者:数据小太阳 更新时间:2023-10-29 03:33:27 27 4
gpt4 key购买 nike

我正在按照 http://golang.org/doc/code.html 编写小应用程序

我的目录树看起来像

-blog
-bin
-pkg
-src
-github.com
-packages_that_i_imported
-myblog
-config
routes.go
server.go

我的 server.go 文件包含以下代码

package main

import "..." //ommited imports


func main(){
r:= mux.InitRoutes() //function from imported package
Register_routes(r) //function from routes.go
}

还有我的 routes.go

package main

func Register_routes(r *Router){
r.addRoute("test", "test", "test)
}

但是在我执行 go run server.go 之后我收到以下错误

$ go run server.go 
# command-line-arguments
./server.go:10: undefined: Register_routes

GOPATH 变量指向我的/blog文件夹

我错过了什么?为什么 go 看不到子目录中的文件?

附言config/routes.go 是 server.go 包的一部分

P.P.S 我已经将 routes.go 移动到与 server.go 相同的文件夹,但错误仍然存​​在

最佳答案

为了使用另一个包中定义的函数,首先你必须导入它:

import "myblog/config"

然后你必须通过包名来引用它:

config.Register_routes(r)

此外,包名称应反射(reflect)定义它的文件夹名称。在你的 routes.go 中,包应该是 configmain包比较特殊,main包会被编译成可执行的二进制文件(它是程序的入口)。参见 Program Execution在语言规范中。

从您链接的页面:Package names :

Go's convention is that the package name is the last element of the import path: the package imported as "crypto/rot13" should be named rot13.

Executable commands must always use package main.

There is no requirement that package names be unique across all packages linked into a single binary, only that the import paths (their full file names) be unique.

查看博文 Package names获取详细指南。

请注意,同一个包的不同文件必须放在同一个文件夹中。并且同一包的不同文件可以使用包中的所有内容,而无需导入包,也无需使用包名(无论在哪个文件中定义)。对于未导出的标识符也是如此。从另一个包中,您只能访问导出的标识符(它们的名称必须以大写字母开头)。

此外,go 的命名约定是使用混合大写而不是下划线来编写多词名称,请参阅 Effective Go / MixedCaps .因此该函数应命名为 RegisterRoutes 但这不是必需的。

关于go - 从子目录访问函数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30572146/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com