导入的 Golang 包说未定义/不可用
Imported Golang Package Saying Undefined / Not Available
所以我想创建一个库,我可以从我正在构建的脚本/项目中使用它。该库名为 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"
看来这是一个指针问题。代码应该是:
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),
}
}
问题出在这里:
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{ ...
所以我想创建一个库,我可以从我正在构建的脚本/项目中使用它。该库名为 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"
看来这是一个指针问题。代码应该是:
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),
}
}
问题出在这里:
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{ ...