为了账号安全,请及时绑定邮箱和手机立即绑定

是否有可能默认情况下不包含 subdir 中的 Golang 包?

是否有可能默认情况下不包含 subdir 中的 Golang 包?

Go
森栏 2022-01-17 18:27:56
我正在使用一个 golang 包,比如 name pkgfoo;而作者明确表示,如果我们想用一个包subpkg下pkgfoo,我需要明确进口subpkg。我不明白背后的原因。如果我在Golang中导入顶级pkg,subpkg不会自动导入吗?package mainimport (    "myownpackage"    "github.com/usera/pkgfoo"    "github.com/usera/pkgfoo/subpkg")func main() {    // Use functions in pkgfoo, and use functions in pkgfoo/subpkg    // ......    http.HandleFunc("/login", login)    err := http.ListenAndServe(":9090", nil) // setting listening port    if err != nil {        log.Fatal("ListenAndServe: ", err)    }}我的问题是我是否真的需要import "github.com/usera/pkgfoo/subpkg"声明。
查看完整描述

1 回答

?
蝴蝶不菲

TA贡献1810条经验 获得超4个赞

Go 包由一个或多个源文件构成,这些源文件被组织到文件系统中的文件夹中。同一个包的源文件必须在同一个文件夹中。


但是在 Go 中没有“包层次结构”,“子包”术语只是指一个包的文件夹是另一个包的子文件夹。我们经常将包组织到作为其他子文件夹的文件夹中,因为这些包之间存在某种联系(例如,一个包仅由父文件夹中的另一个存在使用;或者子文件夹中的包是特定的或更特殊的实现包在父文件夹中;或者只是一个逻辑分组 - 请参阅答案的结尾)。


所以每当你这样做


import "github.com/usera/pkgfoo"

它只导入pkgfoo,没有其他包与前缀共享相同的路径。如果您github.com/usera/pkgfoo/subpkg也需要,您还需要显式导入它:


import (

    "github.com/usera/pkgfoo"

    "github.com/usera/pkgfoo/subpkg"

}

Go 博客:标准库中使用的目录上的包名称:


目录。标准库使用类似目录、、、crypto和container来对相关协议和算法的包进行分组encoding。image这些目录之一中的包之间没有实际关系;目录只是提供了一种排列文件的方法。只要导入不会创建循环,任何包都可以导入任何其他包。


查看完整回答
反对 回复 2022-01-17
  • 1 回答
  • 0 关注
  • 141 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信