可以再分目录放。
一个目录一般情况下只能是一个包,但目录下可以有子目录,而每个子目录都可以是一个包。
一个目录下只能一个包一般是正确的,但有个特殊情况,如果源码文件中包含了测试,测试的包名可以与主包名不同。
还有,Go 中有模块管理机制,一个模块可以由很多个包组成,即一个目录的下级目录都属于这个模块。
补充:我突然觉得,你问题里的包,从某种意义上,想表达的是一个模块,简单而言,就是 git clone 下来的内容不要理解为一个包,而要理解为一个模块。
一个简单例子。
有个目录是 github.com/poloxue/p1,假设包名为 p1。而 p1 下面还有个子目录 p2,即 github.com/poloxue/p1/p2,包名为 p2。两个不同目录下是不同的包。
如果希望 p1 目录下有两个包,可以创建一个测试文件 p1_test.go, 声明它的包名为 p1_test。
如果 github.com/poloxue/p1 目录下通过 go mod 创建了一个模块 github.com/poloxue/p1,那这里的 p1 和 p2 都属于 github.com/poloxue/p1 这个模块。