【发布时间】:2020-09-23 04:00:31
【问题描述】:
我是新来的模块构建。我想做的是创建一个带有常用方法的 go 库,其他开发人员可以在他们的 go 代码中使用。
所以首先在我的内部 github 中,我创建了一个 repo https://internalgithub/<org>/lib-go.git
回购结构看起来像
$ tree
.
├── README.md
├── go.mod
├── go.sum
└── main.go
而main.go文件有以下内容
package main
import (
"flag"
"os"
"path/filepath"
"k8s.io/client-go/kubernetes"
"k8s.io/client-go/rest"
"k8s.io/client-go/tools/clientcmd"
)
func main() {}
func someFunctinDevelopersNeed(cluster bool) kubernetes.Interface {
if cluster == false {
var kubeconfig *string
.
.
return clientset
}
代码在我的 org github 的 master 分支中可用。
下一个任务是编写调用这个库的代码,然后调用方法someFunctinDevelopersNeed
所以在我的应用代码中,我的 main.go 看起来像
package main
import "internalgithub/<org>/lib-go"
func main() {
clientset = someFunctinDevelopersNeed()
.
.
}
但是当我尝试做 go get -t -v internalgithub/<org>/lib-go时,我得到了
runtime.main_main·f: function main is undeclared in the main package
有什么我错过了吗?
编辑:
根据建议,现在我做了以下
$ tree
.
├── README.md
├── go.mod
├── go.sum
└── kubernetes
└── kubernetes.go
kubernetes.go 以
package kubernetes
import (
"flag"
"os"
"path/filepath"
"k8s.io/client-go/kubernetes"
"k8s.io/client-go/rest"
"k8s.io/client-go/tools/clientcmd"
)
func someFunctinDevelopersNeed(cluster bool) kubernetes.Interface {
if cluster == false {
var kubeconfig *string
.
.
return clientset
}
即使进行了这些更改,我也会遇到同样的错误
【问题讨论】:
-
您不能导入
main包。将共享代码放在不同的包中。 -
stackoverflow.com/questions/25318589/… 似乎与您的问题非常相似,但可能不是真正的重复。
-
只是为了确保 Adrian 正确的评论不会在答案的影响下被误解。一个主包在一个模块中非常好(即使是多个主包也很常见),但是完全 不可能导入任何主包。您打算重复使用的代码必须放在任何其他包中。
-
@Adrian 我已经根据您的建议编辑了我的问题并实施了它。我遇到了同样的问题
-
@JasonStanley 请检查您的编辑,因为它似乎已被切断,并且不包括所做的全部更改,也不包括您在更改时遇到的错误。
标签: go go-modules