导入的Golang包说未定义/不可用

时间:2015-11-04 22:55:02

标签: go import packages

所以我想创建一个我可以在我构建的脚本/项目中使用的库。该库名为go_nessus,(完整源代码:http://github.com/kkirsche/go-nessus)但我在导入时遇到问题。

go_nessus代码示例:

# go-nessus/client
package go_nessus

import (
    "fmt"
)

func (nessus *Nessus) MakeClient(host, port, accessKey, secretKey string) Nessus {
    return Nessus{
        Ip:        fmt.Sprintf("%s", host),
        Port:      fmt.Sprintf("%s", port),
        AccessKey: fmt.Sprintf("%s", accessKey),
        SecretKey: fmt.Sprintf("%s", secretKey),
    }
}

尝试使用此功能时,我收到以下错误:

~/g/G/s/g/k/attempt ❯❯❯ go install -race && $GOPATH/bin/attempt
# github.com/kkirsche/attempt
./attempt.go:6: undefined: go_nessus.MakeClient

测试文件如下所示:

package main

import "github.com/kkirsche/go-nessus"

func main() {
    nessusClient := go_nessus.MakeClient("localhost", "8834", "ExampleAccessKey", "ExampleSecretKey")
}

我遗憾的是,我无法弄清楚如何实际使用我创造的方法而没有错误。在弄清楚我的导入过程出了什么问题时,我们将非常感谢您的帮助。

我的go env

GOARCH="amd64"
GOBIN="/Users/kkirsche/git/Go/bin"
GOEXE=""
GOHOSTARCH="amd64"
GOHOSTOS="darwin"
GOOS="darwin"
GOPATH="/Users/kkirsche/git/Go"
GORACE=""
GOROOT="/usr/local/go"
GOTOOLDIR="/usr/local/go/pkg/tool/darwin_amd64"
GO15VENDOREXPERIMENT=""
CC="clang"
GOGCCFLAGS="-fPIC -m64 -pthread -fno-caret-diagnostics -Qunused-arguments -fmessage-length=0 -fno-common"
CXX="clang++"
CGO_ENABLED="1"

2 个答案:

答案 0 :(得分:1)

问题出在这里:

func (nessus *Nessus) MakeClient(host, port, accessKey, secretKey string) Nessus {

在这里:

    nessusClient := go_nessus.MakeClient("localhost", "8834", "ExampleAccessKey", "ExampleSecretKey")
在您的包中

,您正在使该函数成为Nessus类型的成员 但在主要部分,你称之为包级别功能

我相信您希望将MakeCliet定义为:

func MakeClient(host, port, accessKey, secretKey string) Nessus {

使它成为包级函数。

另外,如果你不想一直复制结构,你可能想在这里使用指针,这将是:     func MakeClient(host,port,accessKey,secretKey string)* Nessus {

然后:

return &Nessus{ ...

答案 1 :(得分:0)

这似乎是一个指针问题。代码应该是:

package gonessus

import (
    "fmt"
)

func (nessus Nessus) MakeClient(host, port, accessKey, secretKey string) *Nessus {
    return &Nessus{
        Ip:        fmt.Sprintf("%s", host),
        Port:      fmt.Sprintf("%s", port),
        AccessKey: fmt.Sprintf("%s", accessKey),
        SecretKey: fmt.Sprintf("%s", secretKey),
    }
}