英文:
How to structure a package during development?
问题
我想在github.com/mylogin/mypackage
上发布一个包。为了开发它,我创建了以下文件结构:
mypackage/
├─ mypackage.go
├─ go.mod // 错误地命名为mypackage.mod
├─ tests/
│ ├─ firsttest_test.go
│ ├─ secondtest_test.go
mypackage.go
将有一个函数(mypackage(...)
)
go.mod
目前是这样的:
module github.com/mylogin/mypackage
go 1.17
我的问题是:在编写测试时,我需要导入mypackage
:
- 一方面,我不能导入
github.com/mylogin/mypackage
,因为它还不存在 - 另一方面,我应该导入
github.com/mylogin/mypackage
,因为这最终是其他人(或操作)复制测试的方式
我该如何解决这个矛盾?我的文件布局应该是什么样的?
英文:
I would like to publish a package at github.com/mylogin/mypackage
. In order to develop it, I created the following file structure
mypackage/
├─ mypackage.go
├─ go.mod // used to be mypackage.mod by mistake
├─ tests/
│ ├─ firsttest_test.go
│ ├─ secondtest_test.go
mypackage.go
will have one function (mypackage(...)
)
<del>mypackage.mod
</del> go.mod
is currently
module github.com/mylogin/mypackage
go 1.17
My question: when writing tests, I need to import mypackage
:
- on the one hand I cannot import
github.com/mylogin/mypackage
because it is not there yet - on the other hand I should however import
github.com/mylogin/mypackage
because it is ultimately the way for others (or Actions) to replicate the tests
How can I get off this contradiction? What should be the proper layout of my files?
答案1
得分: 4
> mypackage.mod
目前是这样的
该文件必须被命名为go.mod
。其他任何名称都将被Go工具链忽略。
> - 一方面,我无法导入github.com/mylogin/mypackage
,因为它还不存在
这实际上并不重要。如果你有一个go.mod
文件(参见上面关于更正文件名的说明),Go会首先考虑这个文件,而不是进行网络请求。这意味着它会在你的项目顶层找到go.mod
文件,并意识到当前项目是该模块,并使用它自己。
英文:
> mypackage.mod
is currently
The file must be called go.mod
. Any other name will be ignored by the Go toolchain.
> - on the one hand I cannot import github.com/mylogin/mypackage
because it is not there yet
That's not actually relevant. If you have a go.mod
file (see above note about correcting the filename), Go knows to consider this first, before making network requests. That means that it will find the go.mod
at the top level of your project, and realize that your current project is that module, and use itself.
答案2
得分: 2
> 一方面,我无法导入github.com/mylogin/mypackage
,因为它还不存在。
你可以导入"github.com/mylogin/mypackage"
,因为它是同一个模块中的一个包。
如果由于某种原因无法工作,可能是go.mod
文件中的module
指令或_test.go
文件中的import
语句中有拼写错误。
话虽如此,通常github.com/mylogin/mypackage
的测试应该位于与mypackage
本身相同的目录中:
mypackage/
├─ go.mod
├─ mypackage.go
├─ firsttest_test.go
├─ secondtest_test.go
如果你想从外部用户的角度测试该包的API,可以让_test.go
文件声明package mypackage_test
而不是package mypackage
。
(详见go help test
了解更多详情。)
英文:
> on the one hand I cannot import github.com/mylogin/mypackage
because it is not there yet
You can import "github.com/mylogin/mypackage"
, because it is a package in the same module.
If that isn't working for some reason, there may be a typo either in the module
directive in your go.mod
file or in the import
statement in the _test.go
file.
That said, typically the tests for github.com/mylogin/mypackage
would be located in the same directory as mypackage
itself:
mypackage/
├─ go.mod
├─ mypackage.go
├─ firsttest_test.go
├─ secondtest_test.go
If you want to test the package's API from the perspective of an outside user, you can have the _test.go
file declare package mypackage_test
instead of package mypackage
.
(See go help test
for more detail.)
通过集体智慧和协作来改善编程学习和解决问题的方式。致力于成为全球开发者共同参与的知识库,让每个人都能够通过互相帮助和分享经验来进步。
评论