我使用过GOPATH,但对于目前我面临的这个问题,它没有帮助。我希望能够创建特定于项目的包:
myproject/
├── binary1.go
├── binary2.go
├── package1.go
└── package2.go
我尝试了多种方法,但我怎么得到package1 ?在二进制中工作。Go或者binary2。等等?
例如;我希望能够导入“package1”,然后能够运行去构建binary1。go,一切正常工作,而不会抛出在GOROOT或GOPATH上找不到包的错误。我需要这种功能的原因是大型项目;我不想引用多个其他包或将它们保存在一个大文件中。
也许您正在尝试模块化您的包。我假设package1和package2在某种程度上是同一个包的一部分,但为了可读性,您将它们拆分为多个文件。
如果前面的案例是你的,你可以在这些多个文件中使用相同的包名,就像有相同的文件一样。
这是一个例子:
add.go
package math
func add(n1, n2 int) int {
return n1 + n2
}
subtract.go
package math
func subtract(n1, n2 int) int {
return n1 - n2
}
donothing.go
package math
func donothing(n1, n2 int) int {
s := add(n1, n2)
s = subtract(n1, n2)
return s
}
我不是围棋专家,这是我在stackoverflow的第一个帖子,所以如果你有一些建议,它会很受欢迎。
你可以使用replace
go mod init example.com/my/foo
foo / go.mod
module example.com/my/foo
go 1.14
replace example.com/my/bar => /path/to/bar
require example.com/my/bar v1.0.0
foo / main.go
package main
import "example.com/bar"
func main() {
bar.MyFunc()
}
酒吧/ go.mod
module github.com/my/bar
go 1.14
酒吧/ fn.go
package github.com/my/bar
import "fmt"
func MyFunc() {
fmt.Printf("hello")
}
导入本地包就像导入外部包一样
除了在里面走。Mod文件将外部包名称替换为本地文件夹。
文件夹的路径可以是完整的或相对的/path/to/bar或../bar
https://github.com/golang/go/wiki/Modules#when-should-i-use-the-replace-directive
https://thewebivore.com/using-replace-in-go-mod-to-point-to-your-local-module/
要向项目中添加“本地”包,请添加一个文件夹(例如“package_name”)。然后把你的实现文件放到那个文件夹里。
src/github.com/GithubUser/myproject/
├── main.go
└───package_name
└── whatever_name1.go
└── whatever_name2.go
在你的包main中这样做:
import "github.com/GithubUser/myproject/package_name"
其中package_name是文件夹名,它必须与whatever_name1文件中使用的包名匹配。Go和whatever_name . Go。换句话说,带有子目录的所有文件应该属于同一个包。
只要在导入中指定父文件夹的整个路径,就可以进一步嵌套更多子目录。
我有一个类似的问题,我目前使用的解决方案使用Go 1.11模块。我有如下结构
- projects
- go.mod
- go.sum
- project1
- main.go
- project2
- main.go
- package1
- lib.go
- package2
- lib.go
我能够从project1和project2导入package1和package2
import (
"projects/package1"
"projects/package2"
)
运行go mod init项目后。我可以使用从project1和project2目录构建或者我可以使用build -o project1/exe project1/*。从项目目录。
这种方法的缺点是你所有的项目最终都会在go.mod中共享相同的依赖项列表。我仍在寻找这个问题的解决方案,但它看起来可能是根本性的。
也许您正在尝试模块化您的包。我假设package1和package2在某种程度上是同一个包的一部分,但为了可读性,您将它们拆分为多个文件。
如果前面的案例是你的,你可以在这些多个文件中使用相同的包名,就像有相同的文件一样。
这是一个例子:
add.go
package math
func add(n1, n2 int) int {
return n1 + n2
}
subtract.go
package math
func subtract(n1, n2 int) int {
return n1 - n2
}
donothing.go
package math
func donothing(n1, n2 int) int {
s := add(n1, n2)
s = subtract(n1, n2)
return s
}
我不是围棋专家,这是我在stackoverflow的第一个帖子,所以如果你有一些建议,它会很受欢迎。