为了账号安全,请及时绑定邮箱和手机立即绑定

从子目录访问函数

从子目录访问函数

Go
30秒到达战场 2021-10-11 10:41:24
我正在按照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"应该是 named rot13

可执行命令必须始终使用 package main

没有要求包名在链接到单个二进制文件的所有包中是唯一的,只要求导入路径(它们的完整文件名)是唯一的。

查看博客文章包名称以获取详细指南。

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

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


查看完整回答
反对 回复 2021-10-11
  • 1 回答
  • 0 关注
  • 177 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信