gpt4 book ai didi

module - Go 和命名空间 : is it possible to achieve something similar to Python?

转载 作者:IT王子 更新时间:2023-10-29 01:12:08 25 4
gpt4 key购买 nike

我想知道是否有一种方法可以像 Python 一样在 Go 语言中使用命名空间。

在 Python 中,如果我有以下包含函数的文件:

/a.py
def foo():
/b.py
def bar():

我可以在第三个 Python 文件中访问 foobar,如下所示:

import a
a1 = a.foo()
import b
b1 = b.bar()

我在使用 Go 语言查找有关命名空间的文档时遇到了一些困难。Go 中的命名空间是如何实现的?使用packageimport?还是 import 专用于外部库?

我想我明白每个包都应该有一个专用目录。我想知道这是否是绝对强制性的,因为只要模块的高粒度是设计某个想法的最佳方式,它就会变得不切实际。换句话说,我想避免每个包使用一个目录(供内部使用)。

最佳答案

Go 相当于 Python 模块是包。与作为单个文件存在的 Python 模块不同,Go 包由目录表示。虽然一个简单的包可能只在目录中包含一个源文件,但较大的包可以拆分为多个文件。

因此,以您的 Python 示例为例,您可以创建一个包含以下内容的文件 $GOPATH/src/a/a.go:

package a

import "fmt"

func Foo() {
fmt.Println("a.Foo")
}

在你的主程序中,你可以这样调用函数:

package main

import "a"

func main() {
a.Foo()
}

需要注意的是,只有 a 中的导出类型和函数才能在外部使用。也就是说,名称以大写字母开头的类型和函数(这就是我将 foo 重命名为 Foo 的原因)。

如果您不想设置 Go 工作区,您也可以使用相对路径进行导入。例如,如果将主程序中的 import 更改为 import "./a",则 a 包的源代码可以位于 a/a.go 相对于主程序。

关于module - Go 和命名空间 : is it possible to achieve something similar to Python?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22991798/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com