我正在按照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 mainimport "..." //ommited importsfunc main(){ r:= mux.InitRoutes() //function from imported package Register_routes(r) //function from routes.go}还有我的 routes.gopackage mainfunc 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_routesGOPATH 变量指向我的/blog文件夹我错过了什么?为什么 go 看不到子目录中的文件?PS config/routes.go 是 server.go 包的一部分PPS 我已将 routes.go 移动到与 server.go 相同的文件夹,但错误仍然存在
1 回答
慕田峪9158850
TA贡献1794条经验 获得超7个赞
为了使用另一个包中定义的函数,首先你必须导入它:
import "myblog/config"
之后你必须通过包名来引用它:
config.Register_routes(r)
此外,包名称应反映定义它的文件夹名称。在您的 routes.go 中,包应该是config
. 包main
是特殊的,main
包会被编译成可执行的二进制文件(它是程序的入口点)。请参阅语言规范中的程序执行。
从您链接的页面:包名称:
Go 的约定是包名是导入路径的最后一个元素:导入的包
"crypto/rot13"
应该是 namedrot13
。可执行命令必须始终使用 package
main
。没有要求包名在链接到单个二进制文件的所有包中是唯一的,只要求导入路径(它们的完整文件名)是唯一的。
查看博客文章包名称以获取详细指南。
请注意,同一包的不同文件必须放在同一文件夹中。并且同一包的不同文件可以使用包中的所有内容,而无需导入它,也无需使用包名称(与定义在哪个文件中无关)。对于未导出的标识符也是如此。从另一个包中,您只能访问导出的标识符(它们的名称必须以大写字母开头)。
此外,go 命名约定是使用混合大写字母而不是下划线来编写多词名称,请参阅Effective Go / MixedCaps。所以函数应该被命名,RegisterRoutes
但这不是必需的。
- 1 回答
- 0 关注
- 177 浏览
添加回答
举报
0/150
提交
取消