fst*_*tab 7 namespaces module package go
我想知道是否有一种方法可以像Go语言一样在Go语言中使用名称空间.
在Python中如果我有以下文件包含函数:
/a.py
def foo():
/b.py
def bar():
Run Code Online (Sandbox Code Playgroud)
我可以访问foo,并bar在第三Python的文件如下:
import a
a1 = a.foo()
import b
b1 = b.bar()
Run Code Online (Sandbox Code Playgroud)
我在使用Go语言查找名称空间的文档时遇到了一些困难.如何实现命名空间?用package和import?或者import致力于外部图书馆?
我想我明白,每个包都应该有一个专用目录.我想知道这是否绝对是强制性的,因为只要高粒度的模块是设计某个想法的最佳方式,它就变得不切实际.换句话说,我想避免每个包使用一个目录(供内部使用).
Jam*_*dge 12
Go等效于Python模块是包.与作为单个文件存在的Python模块不同,Go包由目录表示.虽然简单包可能只包含目录中的单个源文件,但较大的包可以拆分为多个文件.
因此,要获取Python示例,您可以创建$GOPATH/src/a/a.go包含以下内容的文件:
package a
import "fmt"
func Foo() {
fmt.Println("a.Foo")
}
Run Code Online (Sandbox Code Playgroud)
在您的主程序中,您可以像这样调用函数:
package main
import "a"
func main() {
a.Foo()
}
Run Code Online (Sandbox Code Playgroud)
需要注意的一点是,只有a外部输出的类型和功能才可用.也就是说,类型和函数名称以大写字母开始(这就是为什么我改名foo到Foo).
如果您不想设置Go工作区,还可以使用导入的相对路径.例如,如果将主程序中的导入更改为import "./a",则a程序包的源代码可以位于a/a.go相对于主程序的位置.