我是新手,正在尝试运行一个包含以下内容的go脚本:
import (
"bytes"
"crypto/aes"
"crypto/cipher"
"crypto/rand"
"crypto/sha256"
"encoding/base64"
"errors"
"fmt"
"io"
"golang.org/x/crypto/pbkdf2"
)
如果我尝试运行该脚本,它显示我缺少pbkdf2包:
$ go run DecryptGrafanaPassword.go
DecryptGrafanaPassword.go:12:2: no required module provides package golang.org/x/crypto/pbkdf2: go.mod file not found in current directory or any parent directory; see 'go help modules'
但当我尝试安装它时,它也抱怨它不是主包:
$ go install golang.org/x/crypto/pbkdf2@latest
package golang.org/x/crypto/pbkdf2 is not a main package
最简单的方法是什么?
go install
下载一个包并构建一个可执行文件。每个可执行文件都必须有一个子模块main
。由于golang.org/x/crypto/pbkdf2
没有main
,因此go install
失败。
实际上,你只需要go mod tidy
。它读取源代码,将所需的模块写入go.mod
并下载它们。我用你的导入创建了一个小例子,这就是go mod tidy
所做的:
code$ go mod tidy
go: finding module for package golang.org/x/crypto/pbkdf2
go: downloading golang.org/x/crypto v0.0.0-20220817201139-bc19a97f63c8
go: found golang.org/x/crypto/pbkdf2 in golang.org/x/crypto v0.0.0-20220817201139-bc19a97f63c8
这是go.mod
,由以下命令更新:
module example.org
go 1.16
require golang.org/x/crypto v0.0.0-20220817201139-bc19a97f63c8
golang.org/x/crypto
的源代码已自动下载到$GOPATH/pkg/mod/golang.org/x/crypto@v0.0.0-20220817201139-bc19a97f63c8/