同样先看几个文件:
// main.go
package main
import (
"./subpack" //这里是目录相对路径,不是包名
"fmt"
)
func main(){
fmt.Println(subpack.sub()) //这里的requests才是./requests目录中的package名称
function() //因为是在同一个目录下,所以可以直接使用这个文件中的方法和变量等...
//但是编译或运行的时候要这样:go build,而不用指出文件名go build main.go
fmt.Println(subpack.VERSION)
}
// function.go
package main
import "fmt"
func function(){
fmt.Println("this main package, function func")
}
// subpack/subpack.go
package subpack
import (
"fmt"
)
var VERSION string = "0.6"
func Sub() string { //注意这里的首字母大写
fmt.Println("subpack_name sub func")
return "subpack_name sub func"
}
在golang 里面一个目录为一个package, 一个package级别的func, type, 变量, 常量, 这个package下的所有文件里的代码都可以随意访问, 也不需要首字母大写。看function.go
中的function
函数,由于function.go
和main.go
在同一个目录,所以main.go
可以直接使用function.go
中的这个function
函数(main.go
第11行直接使用了function
)。
引用其它目录中的文件需要import
这个文件所在的文件夹相对位置,然后在代码中用这个文件中的package
包名作为使用依据。看第三段代码,subpack文件夹
和main.go
在同一个目录,subpack文件夹
中有个subpack.go文件
,所以main.go要import ./subpack
这个文件夹,这个subpack.go
文件的package
是subpack
,并且Sub
方法是首字母大写,所以main.go
中可以用subpack.Sub()
方法。
PS:文件夹名和文件夹内的文件package
名称可以不一致,但是那样不符合语言规范,并且会很杂乱。
还是python的import
简洁、简单!!!golang一堆槽点!!!