hyperledger-fabric - HyperLedger Fabric SDK Go 显示无法将 nil 转换为 csr.KeyRequest 类型
问题描述
其中一个基于 go-lang 的微服务代码需要与 Fabric 的链码连接,直到上次都运行良好,目前没有问题。
但是现在它在构建基于 go 的微服务时显示了以下问题,该微服务具有结构客户端代码以与结构链代码连接。
../vendor/github.com/hyperledger/fabric-sdk-go/internal/github.com/hyperledger/fabric-ca/util
../../vendor/github.com/hyperledger/fabric-sdk-go/internal/github.com/hyperledger/fabric-ca/util/csp.go:47:8:无法将nil转换为csr.KeyRequest类型 ../../vendor/github.com/hyperledger/fabric-sdk-go/internal/github.com/hyperledger/fabric-ca/util/csp.go:132:37:不能使用req.KeyRequest(类型* csr.KeyRequest) 作为类型 csr.KeyRequest 在 getBCCSPKeyOpts 的参数中
也许它是一个依赖问题,我清理了完整的供应商目录并完成了 dep ensure --update ,但它显示了同样的问题,
更多信息 :
转到版本 1.12
在 GoPkg.Toml 上
[[覆盖]] name = "github.com/hyperledger/fabric" 分支 = "master"
[[覆盖]] name = "github.com/hyperledger/fabric-sdk-go" 分支 = "master"
我尝试了 fabric-sdk-go 的各种组合和不同分支,它仍然显示相同,尽管它之前工作得很好。
解决方案
自 1.0.0-alpha5 发布以来,fabric-sdk-go 所依赖的包似乎发生了许多变化。
当我现在只导入一个外部依赖项(github.com/hyperledger/fabric-sdk-go)运行 go build 时,我得到了以下 go.mod 文件,(我go mod
用于包管理)
...
require (
github.com/cloudflare/cfssl v0.0.0-20190726000631-633726f6bcb7 // indirect
github.com/go-kit/kit v0.9.0 // indirect
github.com/golang/mock v1.3.1 // indirect
github.com/golang/protobuf v1.3.2 // indirect
github.com/google/certificate-transparency-go v1.0.21 // indirect
github.com/hyperledger/fabric-lib-go v1.0.0 // indirect
github.com/hyperledger/fabric-sdk-go v1.0.0-alpha5
github.com/pkg/errors v0.8.1 // indirect
github.com/prometheus/client_golang v1.0.0 // indirect
github.com/spf13/viper v1.4.0 // indirect
github.com/zmap/zlint v0.0.0-20190730215301-9971d62266e7 // indirect
golang.org/x/net v0.0.0-20190724013045-ca1201d0de80 // indirect
google.golang.org/grpc v1.22.1 // indirect
)
其中包含尖端版本的软件包,似乎会产生一些如下的构建问题,包括你所拥有的。
# github.com/hyperledger/fabric-sdk-go/internal/github.com/hyperledger/fabric/core/operations
../../Go/pkg/mod/github.com/hyperledger/fabric-sdk-go@v1.0.0-alpha5/internal/github.com/hyperledger/fabric/core/operations/system.go:185:43: undefined: "github.com/prometheus/client_golang/prometheus".Handler
../../Go/pkg/mod/github.com/hyperledger/fabric-sdk-go@v1.0.0-alpha5/internal/github.com/hyperledger/fabric/core/operations/system.go:227:23: not enough arguments in call to s.statsd.SendLoop
have (<-chan time.Time, string, string)
want (context.Context, <-chan time.Time, string, string)
# github.com/hyperledger/fabric-sdk-go/internal/github.com/hyperledger/fabric-ca/util
../../Go/pkg/mod/github.com/hyperledger/fabric-sdk-go@v1.0.0-alpha5/internal/github.com/hyperledger/fabric-ca/util/csp.go:46:8: cannot convert nil to type csr.KeyRequest
../../Go/pkg/mod/github.com/hyperledger/fabric-sdk-go@v1.0.0-alpha5/internal/github.com/hyperledger/fabric-ca/util/csp.go:131:37: cannot use req.KeyRequest (type *csr.KeyRequest) as type csr.KeyRequest in argument to getBCCSPKeyOpts
上次构建成功时,我手动编写了 go.mod 文件以包含特定版本的依赖项。
...
require (
github.com/cloudflare/cfssl v0.0.0-20190409034051-768cd563887f // indirect
github.com/go-kit/kit v0.8.0 // indirect
github.com/go-logfmt/logfmt v0.4.0 // indirect
github.com/golang/mock v1.3.0 // indirect
github.com/google/certificate-transparency-go v1.0.21 // indirect
github.com/hyperledger/fabric-lib-go v1.0.0 // indirect
github.com/hyperledger/fabric-sdk-go v1.0.0-alpha5
github.com/pkg/errors v0.8.1 // indirect
github.com/prometheus/client_golang v0.9.2 // indirect
github.com/spf13/viper v1.3.2 // indirect
google.golang.org/grpc v1.20.1 // indirect
)
它运作良好。
推荐阅读
- android - 如何在 Android 中的几个 ToggleButtons 上切换语句
- java - Hbase客户端读取不同用户进行读写
- css - mix-blend-mode - 使属性变暗/将标题与某种颜色混合
- pandas - 由于 Numpy 依赖,在 Spyder 中导入 Pandas 失败
- graphql - Hot Chocolate 无法为输入类型的字段设置默认值
- perl - 修改 Mojolicious 中的默认控制器/模型路径
- javascript - 使用递归函数找到给定整数的阶乘
- node.js - 将标头发送到客户端后无法设置标头(当我点击 axios post requrest 时出错)
- javascript - 使用 fast-json-patched 进行文档版本控制和时间安排
- discord - 将反应复制到不和谐消息