2015-11-04 2 views
0

Итак, я хочу создать библиотеку, которую я могу использовать из сценария/проекта, который я создаю. Библиотека называется go_nessus, (полный исходный код: http://github.com/kkirsche/go-nessus), но у меня возникла проблема при импорте.Импортированный пакет Golang, говорящий Undefined/Not Available

Пример кода 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" 
+0

FWIW следует избегать подчеркивания в именах пакетов - '' nessus' или gonessus' будет лучше. См. Здесь: https://golang.org/doc/effective_go.html#names – elithrar

ответ

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 (хост, порт, Accesskey, SecretKey строка) * Nessus {

, а затем:

return &Nessus{ ... 
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), 
    } 
} 
Смежные вопросы