【发布时间】:2020-01-12 21:53:38
【问题描述】:
我有一个奇怪的问题。如果包含其他包名的一半,我是否需要在 Go 中导入 2 个包?
例如,如果我已经导入 "os/exec"
,我应该导入 "os"【问题讨论】:
我有一个奇怪的问题。如果包含其他包名的一半,我是否需要在 Go 中导入 2 个包?
例如,如果我已经导入 "os/exec"
,我应该导入 "os"【问题讨论】:
没有。事实上,即使你想,你也做不到。导入您不直接引用的包将阻止 Go 编译。见this example:
package main
import (
"os"
"os/exec"
)
func main() {
_ = exec.Cmd{}
}
产生这个编译错误:
./prog.go:4:2: 导入但未使用:“os”
仅当您需要os/exec 中的功能时才导入os/exec,并且仅当您需要os 中的功能时才导入os。
在某些(但绝对不是全部)情况下,包 x/y 可能依赖于 x,但它会自行导入,因此您无需担心。
【讨论】:
package main
import (
"os/exec"
)
func main() {
_ = exec.Cmd{}
_, _ = os.Getwd()
}
上面的代码会报错
未定义:操作系统
因为我们没有导入os 包。正确的实现是:
package main
import (
"os"
"os/exec"
)
func main() {
_ = exec.Cmd{}
_, _ = os.Getwd()
}
package main
import (
"os"
"os/exec"
)
func main() {
_ = exec.Cmd{}
}
上面的代码会报错
导入但未使用:“os”
因为我们没有使用os 包。正确的实现是:
package main
import (
"os/exec"
)
func main() {
_ = exec.Cmd{}
}
因此,如果您需要 os 包的功能,那么您应该导入它,如果您需要 os/exec 的功能,您还应该明确导入它。否则,如果您的代码中只需要其中一个,则不需要同时导入os 和os/exec。
【讨论】:
For example should I import "os" if I already imported "os/exec"我给出了这个问题的答案。