我checked out this answer,由于某种原因,我无法正确理解或无法正常工作
另外,在我开始之前,我已经知道了如何使用github来实现它,但是我想在没有github的情况下尝试它
首先,我有一个main.go文件
package main
import (
"fmt"
"math"
"subpack"
)
//You Import packages without using comma in Go, rather space or new line
//In VS Code, if you use aren't using the package and run then it will automatically removie it
func main() {
fmt.Println("hello world")
//We use math.Floor to round the nunmber
fmt.Println(math.Floor(2.7))
fmt.Println(math.Sqrt(16))
fmt.Println(subpack.Reverse)
}
请注意subpack
,这是我制作的自定义程序包。子包像这样存在
并包含以下代码
package subpack
//If we make this in the same root level of our main it will throw an error
func Reverse(s string) string {
runes := []rune(s)
for i, j := 0, len(runes)-1; i < j; i, j = i+1, j-1 {
runes[i], runes[j] = runes[j], runes[i]
}
return string(runes)
}
运行我们的程序会引发以下错误
cannot find package "subpack" in any of:
/usr/local/go/src/subpack (from $GOROOT)
/Users/anilbhatia/go/src/subpack (from $GOPATH)
问题:是否可以,如果可以的话,如何在不使用github的情况下使用自定义包,而不在GO主文件夹中使用自定义包,而只需引用包含我们的go
文件的文件夹即可我们正在使用的目录。
答案 0 :(得分:2)
如错误所示,编译器无法从其中一个找到subpack
/ usr / local / go / src / subpack(来自$ GOROOT)
标准库软件包(例如fmt
,strings
)所在的位置,或
/ Users / anilbhatia / go / src / subpack(来自$ GOPATH)
用户安装/定义的软件包所在的位置。
要进行导入,您只需在subpack
中包含$GOPATH/src
包的相对路径(相对于main.go
)
假设您的main.go
在/Users/anilbhatia/go/src/parentpack
中,则其导入应为
import "parentpack/subpack"
如果我对您的理解正确,则您希望subpack
的呼叫者(例如main.go
)位于subpack
的无关位置。这实际上是开箱即用的。您的main.go
可以位于任何地方。编译时,编译器会看到parentpack/subpack
的导入路径,并转到$GOPATH/src
和$GOROOT/src
进行查找。
有关源代码组织和一些典型示例的更多信息,可以运行
go help gopath
在您的外壳中。
答案 1 :(得分:1)
起点是$ GOPATH / src,而不是项目的文件夹。
所以你应该使用
import "myproject/subpack"
而不是:
import "subpack"
答案 2 :(得分:0)
出于某种原因,这个问题的所有答案都已经超过 2 年并且已经过时了。你现在绝对可以做到。我认为 Go 的最新版本发生了变化,允许导入不在 $GOPATH
中的自定义包。你可以简单地通过在 main.go 中导入你的“子包”来做你想做的事情:
import "./subpack"