Go从入门到精通——非执行包名与目录的关系

非执行包名与目录的关系

  非执行包的包名可以与目录名不同,但是我们不建议这样做,因为这可能会引起混乱。

  如果我们将上篇 "自己编写非执行包" 中,将 package1.go 中的包声明语句改为:

package package2

  代码会将包名修改为 package2,但是在 test1.go 中引用该包时,还需要引用 package1,这是因为 Go 语言在编译时查找某个包所引用(也叫 “依赖”)的各个其他包时,是以目录名来寻找的,而 package1 的代码文件仍然在名为 package1 的目录下。所以在 test1 包的代码中,仍然需要引用 "package1" 包,但是在调用 "package1" 包中的函数时,则需要用 package2 作为包名。因此,test1 代码应该改为:

1
2
3
4
5
6
7
8
package main
<p>import (<br>
"package1"<br>
)</p>
<p>func main() {<br>
package2.Hello()<br>
}<br>
</p>

  一般来说,我们建议目录名和包名保持一致,包中的源代码文件尽量与包名保持一致,这样能避免混淆。

总结:

  Go 语言程序文件组织方式的概括主要:

    • Go 语言主要是以包来组织程序文件的,每个包对应一个目录,目录名和包名不用必须相同但应尽量保证相同。
    • 包中代码文件可以是一个或多个,文件名称不重要,包名称和目录名称比较重要;因此,后面我们提到编译程序时,一般会说编译某个包而不是某个代码文件。
    • 可执行程序的代码也对应一个包,其中可以引用 Go 语言标准库中的包和自己编写的包。
    • 除标准库外,自己编写的可执行包、非执行包以及以后可能使用到第三方编写的包的代码文件都会被放在 src 目录下,可执行包编译后的可执行文件一般会放到 bin 目录下(使用 go build 命令除外,但一般不推荐用 go build 命令,因为在源代码目录下生成可执行文件会造成不必要的混乱。)
posted @   左扬  阅读(197)  评论(0编辑  收藏  举报
编辑推荐:
· 开发者必知的日志记录最佳实践
· SQL Server 2025 AI相关能力初探
· Linux系列:如何用 C#调用 C方法造成内存泄露
· AI与.NET技术实操系列(二):开始使用ML.NET
· 记一次.NET内存居高不下排查解决与启示
阅读排行:
· 阿里最新开源QwQ-32B,效果媲美deepseek-r1满血版,部署成本又又又降低了!
· 开源Multi-agent AI智能体框架aevatar.ai,欢迎大家贡献代码
· Manus重磅发布:全球首款通用AI代理技术深度解析与实战指南
· 被坑几百块钱后,我竟然真的恢复了删除的微信聊天记录!
· AI技术革命,工作效率10个最佳AI工具
levels of contents
点击右上角即可分享
微信分享提示