Fabric测试网络部署Go链码报错,求助正确安装方法
环境与操作流程
环境:Fabric 2.4.2、Ubuntu20.04、go1.19.5
操作:在minifab工作目录下新建目录,复制其他链码示例的go.mod、go.sum文件,添加自定义main.go后执行命令:
minifab ccup -n contract -l go -v 1.0
报错信息
Run the chaincode install script on cli container ***********non-zero return code
Error: failed to normalize chaincode path: 'go list' failed with: can't load package: package simple:
main.go:13:1: illegal UTF-8 encoding
main.go:13:2: illegal UTF-8 encoding
main.go:13:5: illegal UTF-8 encoding
main.go:13:6: illegal UTF-8 encoding
main.go:13:7: illegal UTF-8 encoding
main.go:13:8: illegal UTF-8 encoding
main.go:13:9: illegal UTF-8 encoding
main.go:13:10: illegal UTF-8 encoding
main.go:13:11: illegal UTF-8 encoding
main.go:13:12: illegal UTF-8 encoding
main.go:16:25: illegal UTF-8 encoding
main.go:16:26: illegal UTF-8 encoding
main.go:16:27: illegal UTF-8 encoding
main.go:16:28: illegal UTF-8 encoding
main.go:16:29: illegal UTF-8 encoding
main.go:16:33: illegal UTF-8 encoding
main.go:16:34: illegal UTF-8 encoding: exit status 1
Error: failed to read chaincode package at 'contract_go_1.0.tar.gz': open contract_go_1.0.tar.gz: no such file or directorySTATS *******************************************************minifab: ok=31 failed=1
问题原因
- 核心问题是**
main.go文件存在非法UTF-8编码字符**,大概率是编辑时不小心插入了不可见特殊字符(比如全角空格、中文标点、复制粘贴带的隐藏字符),Go编译器无法识别这些字符,导致go list命令执行失败,进而无法生成链码安装包contract_go_1.0.tar.gz,最终触发文件找不到的错误。 - 复制其他链码的
go.mod/go.sum本身没问题,问题出在自定义编写的main.go上。
解决步骤
- 检查并修复
main.go的编码异常- 用VS Code、vim等编辑器打开
main.go,定位到报错的第13行和第16行,仔细排查:- 替换全角空格、中文标点等非ASCII字符为对应的半角符号
- 如果是复制来的代码,建议手动重新输入关键行,避免带入隐藏字符
- 确保文件以**UTF-8(无BOM)**编码保存:
- VS Code可通过右下角编码选项切换并保存
- vim中执行
:set fileencoding=utf-8后保存退出
- 用VS Code、vim等编辑器打开
- 本地验证链码合法性
- 在链码目录下执行
go mod tidy,确保依赖正常加载 - 执行
go build,检查是否能正常编译,排除语法错误
- 在链码目录下执行
- 重新执行链码安装
- 清理残留失败资源:
minifab cleanup -n contract - 重新安装启动链码:
minifab ccup -n contract -l go -v 1.0
- 清理残留失败资源:
内容的提问来源于stack exchange,提问作者user21172107

