WSL1环境下golangci-lint误校验Go1.13官方源码报错如何解决
问题原因与解决方案
根本原因
你遇到的Go官方源码重复声明报错,本质是golangci-lint扫描时没有按照GOOS=linux的平台规则过滤不匹配的源码文件:不同系统专属的源码文件(比如后缀_aix.go的AIX平台文件、_linux.go的Linux平台文件)本应在编译/扫描时根据当前系统自动排除,但你的lint配置没有正确触发过滤逻辑,反而对不同平台的同常量/函数定义文件同时做了校验,所以出现重定义报错。
可直接落地的修复步骤
- 第一步:修正Makefile中的lint执行命令
不要指定超出当前项目的扫描路径,同时显式指定构建标签过滤异平台文件、排除GOROOT系统源码目录,示例命令:
确保命令末尾的扫描路径为lint: golangci-lint run --build-tags linux --exclude-dir=/usr/share/go-1.13 ./..../...,仅扫描当前项目根目录下的代码。 - 第二步:匹配golangci-lint与Go版本兼容性
你使用的Go 1.13属于已停止维护的旧版本,不能搭配最新版golangci-lint使用,请降级到v1.30.0及以下的适配版本,新版本已经移除了对Go 1.13的兼容支持,本身就会出现各类扫描异常。 - 第三步(可选):新增项目级lint配置文件
在项目根目录新增.golangci.yml配置,固化排除规则,避免后续反复修改命令:run: # 排除系统GOROOT目录 skip-dirs: - /usr/share/go-1.13 # 显式指定当前平台构建标签,自动过滤异平台源码 build-tags: - linux linters-settings: typecheck: # 跳过对依赖包的安装校验,避免拉取系统源码 skip-install: true
补充说明
你当前的Go环境配置本身没有错误:GOPATH指向/home/robertcob/go,项目位于GOPATH下且携带go.mod文件,Go 1.13的GO111MODULE=auto模式可以正常识别Go mod项目,不需要修改环境变量。
内容的提问来源于stack exchange,提问作者Robert O'Brien
相关产品推荐
相关产品推荐

