我在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
}
我的路线。
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
文件夹
我错过了什么?为什么不查看子目录中的文件?
P.S。 config / routes.go是server.go包的一部分
P.P.S我已将routes.go移至与server.go相同的文件夹,但错误仍然存在
答案 0 :(得分:2)
为了使用另一个包中定义的函数,首先必须导入它:
import "myblog/config"
之后你必须通过包名称来引用它:
config.Register_routes(r)
包名称也应该反映定义它的文件夹名称。在您的routes.go中,包裹应为config
。包main
是特殊的,main
包将被编译成可执行的二进制文件(它是程序的入口点)。请参阅语言规范中的Program Execution。
从您关联的页面:Package names:
Go的约定是包名称是导入路径的最后一个元素:导入为
"crypto/rot13"
的包应命名为rot13
。可执行命令必须始终使用包
main
。不要求包名称在链接到单个二进制文件的所有包中都是唯一的,只要导入路径(它们的完整文件名)是唯一的。
查看博客文章Package names以获取详细指南。
请注意,同一个包的不同文件必须放在同一个文件夹中。并且同一个包的不同文件可以使用包中的所有内容而无需导入它,也不使用包名(在定义的文件中无关紧要)。对于未导出的标识符也是如此。从另一个包中,您只能访问导出的标识符(它们的名称必须以大写字母开头)。
此外,命名约定是使用混合大写字母而不是下划线来编写多字名称,请参阅Effective Go / MixedCaps。因此该函数应命名为RegisterRoutes
,但这不是必需的。
答案 1 :(得分:0)
来自go command的文档:
public yourArraylist<Object> sendData(yourArraylist<Object> t){ myResultedData = t; }
运行编译并运行包含命名Go源的主包 文件。
您需要将第二个文件的名称提供给go run [build flags] [-exec xprog] gofiles... [arguments...]
命令以包含它。
go run