从子目录访问函数

时间:2015-06-01 11:18:34

标签: go

我在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相同的文件夹,但错误仍然存​​在

2 个答案:

答案 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
相关问题