2 回答
TA贡献1831条经验 获得超10个赞
如果您将 tst.go 的包也设置为“package main”,您将能够在没有任何导入语句的情况下访问 p()。
$ cat main.go
package main
func main() {
p()
}
$ cat tst.go
package main
import "fmt"
func p() {
fmt.Println("ola")
}
$ go build ./ && ./test
ola
我相信这将满足您的要求:
我只想制作一个项目并将逻辑拆分为许多不同的文件。
如果您正在构建一个程序而不是一个库,那么公认的 Go 约定是将您的所有文件都作为“package main”:
“main”包告诉 Go 编译器该包应该编译为可执行程序而不是共享库。 http://thenewstack.io/understanding-golang-packages/
请解释您的反对意见
下面是一些众所周知的惯用 Go 项目的例子,它们完全按照我说的做:
https://github.com/tools/godep
https://github.com/docker/containerd/tree/master/containerd
这些是代码拆分在多个 Go 文件中的可执行文件,所有这些文件都属于“package main”。
看到OP有点不清楚,你可以选择解释他想创建一个外部包tst。但他说的很清楚:
我只想制作一个项目并将逻辑拆分为许多不同的文件。
他说很多文件 -没有很多外部包。而且他还说:
当然我的文件结构是:
myFolder/
|- main.go
|_ tst.go
我的建议是在这种情况下做事的正确方法:
executable/
|- main.go (package main)
|- a.go (package main)
|- b.go (package main)
将应用程序拆分为 main、a 和 b。
TA贡献1815条经验 获得超10个赞
如果我正确阅读了问题:
导入路径应该是完整路径,遵循 $GOPATH,所以可能是“github.com/mt/Apollo/tst”
这是包代码应该驻留的地方,也是包导入路径。从文档中看到这一点:
标准库中的包被赋予了短路径,例如“fmt”和“net/http”。对于您自己的包,您必须选择一个基本路径,该路径不太可能与标准库或其他外部库的未来添加发生冲突。
如果您将代码保存在某个源存储库中,那么您应该使用该源存储库的根目录作为您的基本路径。例如,如果您在 github.com/user 上有一个 GitHub 帐户,那应该是您的基本路径。
我有它的工作。这正是我所做的:
main.go
package main
import (
"fmt"
"github.com/mt/Apollo/tst"
)
func main() {
fmt.Println("just testing")
tst.P()
}
tst.go
package tst
import (
"fmt"
)
func P() {
fmt.Println("ola")
}
目录结构如下:
山/阿波罗/main.go
山/阿波罗/tst/tst.go
另一件要注意的事情是我将 func p() 中的“P”大写。不导出小写标识符。更多关于这里
- 2 回答
- 0 关注
- 219 浏览
添加回答
举报