登录
首页 >  Golang >  Go问答

包装声明的目的是什么?

来源:Golang技术栈

时间:2023-03-06 17:36:50 142浏览 收藏

在Golang实战开发的过程中,我们经常会遇到一些这样那样的问题,然后要卡好半天,等问题解决了才发现原来一些细节知识点还是没有掌握好。今天golang学习网就整理分享《包装声明的目的是什么?》,聊聊golang,希望可以帮助到正在努力赚钱的你。

问题内容

每个 Go 文件都以package .

据我所知——这可能是我遗漏了一些信息的地方——只有两个可能的值:它所在的目录的名称*,或main。如果是main,则该目录中的所有其他文件也只能具有main。如果是其他原因,则项目不一致/违反约定。

现在,如果它是目录的名称,那就是多余的,因为同样的信息在目录的名称中。

如果是main,那就有点没用了,因为据我所知,没有办法告诉go build“请构建 所有 main包”。

  • 因为,换句话说,一个目录就是一个包。

正确答案

包的名称不必与目录名称一致。有可能package foobar在目录中xyz/go-foobar。在这种情况下,它xyz/go- foobar变成了一个 导入路径 ,但是你用来质量标识符(函数、类型等)的 包名将foobar是.

这是一个使它更具体的示例:我创建了一个测试包[http://godoc.org/github.com/dmitris/go- foobar](http://godoc.org/github.com/dmitris/go- foobar)(来源在https://github.com/dmitris/go- foobar) - 你从文档页面可以看到,导入路径是“github.com/dmitris/go- foobar”,但包名是foobar,所以你可以调用它提供的函数foobar.Demo()(不是go-foobar.Demo())。

一个类似的现实示例 - NSQ Messaging 平台的导入路径是“github.com/nsqio/go-nsq”,而包名称是“nsq”:[http ://godoc.org/github.com/nsqio/去-nsq](http://godoc.org/github.com/nsqio/go- nsq)。但是,为了用户友好和简单起见,标准和推荐的做法是尽可能保持导入路径的最后部分和包名称相同。

package main不是没用的——它告诉 Go 编译器创建一个可执行文件而不是 .a 库文件(使用go installor go get;go build丢弃编译结果)。package main可执行文件以放置文件的目录名称命名。再举一个具体的例子——我做了一个测试程序https://github.com/dmitris/go- foobar-client,你安装它,go get github.com/dmitris/go-foobar-client你应该得到一个go-foobar-client放在你的 $GOPATH/bin 目录中的可执行文件。package mainGo 编译器从放置文件的目录名称中获取可执行文件的名称。.go包含函数的文件的文件名main()并不重要——在上面的例子中,我们可以重命名main.goclient.go或其他东西,但只要调用封闭目录go- foobar-client,这就是生成的可执行文件的命名方式。

有关 Go 包的其他可访问且实用的阅读材料,我推荐 Dave Cheney 的文章“建立 Go 项目的五个建议” [http://dave.cheney.net/2014/12/01/five-suggestions-for-setting -up-a-go- project](http://dave.cheney.net/2014/12/01/five-suggestions-for-setting-up-a- go-project)。

今天带大家了解了golang的相关知识,希望对你有所帮助;关于Golang的技术知识我们会一点点深入介绍,欢迎大家关注golang学习网公众号,一起学习编程~

声明:本文转载于:Golang技术栈 如有侵犯,请联系study_golang@163.com删除
相关阅读
更多>
最新阅读
更多>
课程推荐
更多>