【问题标题】:Import a github managed go package导入一个 github 托管的 go 包
【发布时间】: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/&lt;org&gt;/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


【解决方案1】:

如果你自己写库,不要加main包。

你可以看到一些流行的golang库,比如go-gin(使用gin.go),gorm(使用gorm.go

对于你的情况,如果你只是想为最常用的函数创建一个集合,你可以添加一个包utils并将你的实现放入utils.go或其他xxx.go文件中

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2017-01-15
    • 1970-01-01
    • 1970-01-01
    • 2020-04-06
    • 2016-07-06
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多