当前位置: 首页 > 面试题库 >

包裹声明的目的是什么?

闾丘淇
2023-03-14
问题内容

每个Go文件均以开头package <something>

据我了解-这可能是我缺少一些信息的地方-
仅有两个可能的值<something>:该目录的名称位于*或中main。如果为main,则该目录中的所有其他文件也只能具有main。如果还有其他问题,则说明该项目不一致/违反约定。

现在,如果它是目录的名称,那么它是多余的,因为相同的信息也包含在目录的名称中。

如果是main,则它是无用的,因为据我所知go build,没有办法告诉“请构建 所有 main软件包”。

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


问题答案:

软件包的名称不必与目录名称一致。可以package foobar在目录中xyz/go-foobar。在这种情况下,xyz/go-foobar成为
导入路径 ,但是用于质量标识符(功能,类型等)的 软件包名称 将是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”,而html" target="_blank">程序包名称为“
nsq”:http
://godoc.org/github.com/nsqio/ go-nsq。但是,为了用户友好和简单起见,标准和推荐的做法是尽可能使导入路径的最后部分和程序包名称相同。

package main不是没有用的-它告诉Go编译器创建一个可执行文件,而不是.a库文件(带有go installgo 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一个项目。



 类似资料:
  • 问题内容: 我有一个pom.xml文件,在该文件中,我看到它们是相同引用的3个依赖项,区别在于标记中 我删除了具有的依赖项,并且仅保留了一个依赖项。我测试了我的应用程序,一切正常。 使用此分类标签的目的是什么?以及为什么我需要重复两次依赖项才能使用添加标记。 问题答案: 分类器区分从相同POM构建但内容不同的工件。它是一些可选的任意字符串,如果存在,则在版本号之后附加到工件名称。 资源

  • 10.3. 包声明 在每个Go语言源文件的开头都必须有包声明语句。包声明语句的主要目的是确定当前包被其它包导入时默认的标识符(也称为包名)。 例如,math/rand包的每个源文件的开头都包含package rand包声明语句,所以当你导入这个包,你就可以用rand.Int、rand.Float64类似的方式访问包的成员。 package main import ( "fmt"

  • 问题内容: 我实际上是从(.NET)学习golang的,对此语言我一无所知。有时我会发现这种声明: https://github.com/golang/crypto/blob/master/ed25519/ed25519.go 到底是什么意思?它是从[] byte继承的结构吗? 只是别名吗? 我以为golang禁止继承。 问题答案: 这是一个类型声明,更具体地说是一个 类型定义 。它创建一个新类型

  • 本文向大家介绍为什么建议Fragment包裹元素?它的简写是什么?相关面试题,主要包含被问及为什么建议Fragment包裹元素?它的简写是什么?时的应答技巧和注意事项,需要的朋友参考一下 为一个组件添加多个元素,可以讲你的子组件列表添加到一个分组中(<></>),并且不会再DOM增加额外节点

  • 在这个 nodejs 代码中, 那个… “声明变量”和“变量”有什么区别? 当我在谷歌上搜索时,我得到了runtime这个词。 wiki说运行时是计算机程序运行时的一种操作.... 但我不能理解。 第1行,“进程”之后的“:”和“NodeJS.进程”是什么意思? 这是否意味着“进程”等于“NodeJS.process”? 还有第4行,在“__filename”和“string”之后的“:”是什么意

  • 这个问题是一个问题的继续。如何使用“”初始化字符串? 我想引起您的注意,即使、、、、包装类也可以以与相同的方式声明,如下所示: 这些类是否也像 类一样得到特殊处理。