如何在 Go 的主包外导入我自己定义的函数?

我对 Go 很陌生,但我来自 C++ 学校。我只想制作一个项目并将逻辑拆分为多个文件。


在 C++ 中,我只需要穿上我main_file.cpp的单曲


#include "my_own_lib.hpp" 

(类似于module.exports然后require('relative/path/to/my-own-lib')在 Node.js 中)


就是这样。在围棋中,我遵循了相同的逻辑,但我的结果是:


$ go run main.go

main.go:4:8: open /Users/mt/Documents/Codes/go/src/github.com/mt/Apollo/tst: no such file or directory

我的文件:


main.go


package main


import "fmt"

import "./tst"


func main() {

    fmt.Println("just testing")

    tst.p()

}

tst.go


package tst


import "fmt"


func p() {

    fmt.Println("ola")

}

当然我的文件结构是:


myFolder/

   |- main.go

   |_ tst.go

有人能告诉我这样做的正确方法是什么吗?


POPMUISE
浏览 220回答 2
2回答

慕哥6287543

如果您将 tst.go 的包也设置为“package main”,您将能够在没有任何导入语句的情况下访问 p()。$ cat main.go package mainfunc main() {    p()}$ cat tst.go package mainimport "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/godephttps://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。

动漫人物

如果我正确阅读了问题:导入路径应该是完整路径,遵循 $GOPATH,所以可能是“github.com/mt/Apollo/tst”这是包代码应该驻留的地方,也是包导入路径。从文档中看到这一点:标准库中的包被赋予了短路径,例如“fmt”和“net/http”。对于您自己的包,您必须选择一个基本路径,该路径不太可能与标准库或其他外部库的未来添加发生冲突。如果您将代码保存在某个源存储库中,那么您应该使用该源存储库的根目录作为您的基本路径。例如,如果您在 github.com/user 上有一个 GitHub 帐户,那应该是您的基本路径。我有它的工作。这正是我所做的:main.gopackage mainimport (    "fmt"    "github.com/mt/Apollo/tst")func main() {    fmt.Println("just testing")    tst.P()}tst.gopackage tstimport (    "fmt")func P() {    fmt.Println("ola")}目录结构如下:山/阿波罗/main.go山/阿波罗/tst/tst.go另一件要注意的事情是我将 func p() 中的“P”大写。不导出小写标识符。更多关于这里
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

Go