【发布时间】:2013-08-20 23:18:00
【问题描述】:
以下关于 Go 包的断言是否准确?
import "package_name"从名为 package_name 的目录中导入所有文件,假设在 $GOPATH(保存用户 go 目录的变量)或标准 go 安装目录树中找到。package_name 目录中的文件通常会声明
package package_name。但他们不是必须的。事实上,import "package_name",如果在导入的 package_name 目录中找到该文件,也会导入包含行package foo的文件。所有大写的函数都将通过包 package_name 声明中给出的名称访问——例如:
package_name.Function_in_file_that_declares_package_name 或 other_than_package_name.Function_in_file_that_declares_other_than_package_name
- 用户定义的包是命令行
go install-ed 从包目录内。但是,go 将拒绝安装与其内置包目录同名的目录。例如,您不能安装字符串目录,因为 go 已经有一个用于内置包“字符串”的字符串目录。但是,用户可以通过创建 my_strings 目录并在其中放置一个声明package strings的文件,将函数附加到字符串包而不更改内置字符串文件夹。现在,import my_strings将加载使用strings.Function_name访问的额外用户定义字符串函数。
总之,import 关键字用于从给定目录加载文件。并且关键字 package 创建了一个命名空间来从该文件外部访问大写函数。
我是否正确理解以上所有内容?
【问题讨论】:
-
看起来有点像你假设 Go 包和导入语句的工作方式有点像 C++ 中的 include 指令和命名空间关键字(提示:它们不是)。尽量不要与 C++ 相提并论,而是阅读 spec。