日常开发中,想要保证工程中代码能够正常运行, 一般都会使用vet进行代码静态扫描, 但是每次手动执行命令有点不太方便,如果在每次开发完成之后,git提交的时候都进行下检查就OK了,想好就干!!!

这里使用golangci-lint这个包: https://golangci-lint.run

golangci-lint 是一个代码检查工具的集合,聚集了多种 Go 代码检查工具,如 golintgo vet 等。

优点:

  • 运行速度快
  • 可以集成到 vscode、goland 等开发工具中
  • 包含了非常多种代码检查器
  • 可以集成到 CI 中

涉及linter: https://golangci-lint.run/usage/linters/

[安装]

# binary will be $(go env GOPATH)/bin/golangci-lint
curl -sSfL https://raw.githubusercontent.com/Goci/golangci-lint/master/install.sh | sh -s -- -b $(go env GOPATH)/bin v1.42.1 golangci-lint --version

更多命令:

# 查看版本
golangci-lint version # 查看linter
golangci-lint help linters # 执行检查操作, 可指定目录
golangci-lint run [dir ...] # golangci-lint 可以通过 -E/--enable 去开启指定 linter,或者 -D/--disable 禁止指定 linter。
1golangci-lint run --disable-all -E errcheck
如上命令代表的就是除了 errcheck 的 linter,禁止其他所有的 linter 生效。 # golangci-lint 还可以通过 -p/--preset 指定一系列 linter 开启。
1golangci-lint run -p bugs -p error 如上命令代表的就是所有属于 bugs 和 error 分类的 linter 生效。 更多可以 golangci-lint run -h

  

[配置文件]

当前工作目录下添加配置文件,加载顺序:

  • golangci.yml

  • .golangci.yaml

  • .golangci.toml

  • .golangci.json

在 golangci-lint 官方文档 https://golangci-lint.run/usage/configuration/#config-file 中,提供了一个示例配置文件,非常地详细,在这其中包含了所有支持的选项、描述和默认值。

使用 pre-commit hook

在项目开发中,我们都会使用到 git,因此我们可以将代码静态检查放在一个 git 触发点上,而不用每次写完代码手动去执行 golangci-lint run 命令。这里,我们就需要用到 git hooks。

git hooks

git hooks 是 git 的一种钩子机制,可以让用户在 git 操作的各个阶段执行自定义的逻辑。git hooks  在项目根目录的 .git/hooks 下面配置,配置文件的名称是固定的,实质上就是一个个 shell 脚本。根据 git 执行体,钩子被分为客户端钩子和服务端钩子两类。

客户端钩子包括:pre-commitprepare-commit-msgcommit-msgpost-commit等,主要用于控制客户端git的提交工作流。服务端钩子:pre-receivepost-receiveupdate,主要在服务端接收提交对象时、推送到服务器之前调用。

注意,以 .sample 结尾的文件名是官方示例,这些示例脚本是不会执行的,只有重命名后才会生效(去除 .sample 后缀)。

[pre-commit]

试想,如果我们同时开发多个项目,也许项目的所采用的的编程语言并不一样,那么它们所需要的 git hooks 将不一致,此时我们是否要手动给每个项目都配置一个单独的 pre-commit 脚本呢,或者我们是否要去手动下载每一个钩子脚本呢。

实际上,并不需要这么麻烦。这里就引出了 pre-commit 框架,它是一个与语言无关的用于管理 git hooks 钩子脚本的工具

安装:

pip install pre-commit

# 查看版本
pre-commit --version

添加配置文件: .pre-commit-config.yaml

# 快速生成配置文件
pre-commit sample-config

查看支持的hooks: https://pre-commit.com/hooks.html

例如:

1repos:
2- repo: https://github.com/golangci/golangci-lint
3 rev: v1.41.1 # the current latest version
4 hooks:
5 - id: golangci-lint

安装git hook脚本

pre-commit install

将会安装到 .git/hooks/pre-commit

之后执行代码提交的时候, 就会自动触发并检查代码了

[集成到goland]

1.安装插件 Go Linter

2.添加文件监听  tool > file watchers + 添加刚才的插件golangci-lint

遇到的问题:

1.使用git提交的时候, 对于循环导包的问题无法验证到? 估计是执行命令的时候参数有问题, 这个后期再看下

golang之代码检查工具golangci-lint的更多相关文章

  1. 《Android Studio实用指南》7.1 AndroidStudio代码检查工具概述

    本文节选自<Android Studio实用指南> 作者: 毕小朋 目前本书已上传到百度阅读, 在百度中搜索[Anroid Studio实用指南]便可以找到本书. Android Stud ...

  2. 《Android Studio有用指南》7.1 AndroidStudio代码检查工具概述

    本文节选自<Android Studio有用指南> 作者: 毕小朋 博客: http://blog.csdn.net/wirelessqa 眼下本书已上传到百度阅读, 在百度中搜索[Anr ...

  3. PC-lint 简明教程(C/C++静态代码检查工具)

    前言 PC-lint是一款小而强大的C/C++静态代码检查工具,它可以检查未初始化变量,数组越界,空指针等编译器很难发现的潜在错误.在很多专业的软件公司如Microsoft,PC-Lint检查无错误无 ...

  4. [原创]Java静态代码检查工具介绍

    [原创]Java静态代码检查工具介绍 一  什么是静态代码检查? 静态代码分析是指无需运行被测代码,仅通过分析或检查源程序的语法.结构.过程.接口等来检查程序的正确性,找出代码隐藏的错误和缺陷,如参数 ...

  5. 最近开始研究PMD(一款采用BSD协议发布的Java程序代码检查工具)

    PMD是一款采用BSD协议发布的Java程序代码检查工具.该工具可以做到检查Java代码中是否含有未使用的变量.是否含有空的抓取块.是否含有不必要的对象等.该软件功能强大,扫描效率高,是Java程序员 ...

  6. Android 代码检查工具SonarQube

    http://blog.csdn.net/rain_butterfly/article/details/42170601 代码检查工具能帮我们检查一些隐藏的bug,代码检查工具中sonar是比较好的一 ...

  7. 【FLYabroad 】微软内部代码检查工具 (Microsoft Source Analysis for C#)[转]

    SourceAnalysis (StyleCop)的终极目标是让所有人都能写出优雅和一致的代码,因此这些代码具有很高的可读性. 早就听说了微软内部的静态代码检查和代码强制格式美化工具 StyleCop ...

  8. 静态代码检查工具 cppcheck 的使用

      CppCheck是一个C/C++代码缺陷静态检查工具.不同于C/C++编译器及其它分析工具,CppCheck只检查编译器检查不出来的bug,不检查语法错误.所谓静态代码检查就是使用一个工具检查我们 ...

  9. 静态代码检查工具 cppcheck 的使用(可分别集成到VS和QT Creator里)

    CppCheck是一个C/C++代码缺陷静态检查工具.不同于C/C++编译器及其它分析工具,CppCheck只检查编译器检查不出来的bug,不检查语法错误.所谓静态代码检查就是使用一个工具检查我们写的 ...

  10. 代码检查工具jshint和csslint

    前面的话 Douglas Crockford大神根据自己的理念用JavaScript写了一个JavaScript代码规范检查工具,这就是JSLint.后来非常流行,也的确帮助了广大的JavaScrip ...

随机推荐

  1. 各种好用的免费快递物流API 接口分享

    全国快递物流查询:1.提供包括申通.顺丰.圆通.韵达.中通.汇通等 600+快递公司在内的快递物流单号查询.2.与官网实时同步更新.3.自动识别快递公司. 全国快递物流地图轨迹查询:[H5 物流轨迹. ...

  2. c程序设计语言 by K&R(四)输入与输出

    一.标准输入.输出 1. 简单的输入\输出机制 从标准输入中一次读取一个字符:int getchar(void) 将字符c送到标准输出中: int putchar(int) 2. 输入重定向 如果程序 ...

  3. ASP.NET Core – TagHelper

    前言 以前写的 Asp.net core 学习笔记之 Tag Helper, 这篇是整理版. 参考 Docs – Author Tag Helpers in ASP.NET Core Creating ...

  4. 文件包含与PHP伪协议

    文件包含与伪协议 一.无任何过滤措施的文件包含漏洞:(ctfshow-web78): 1.data://协议: ?file=data://text/plain,<?php system('tac ...

  5. ModbusRTU通信协议报文剖析

    前言 大家好!我是付工.前面给大家介绍了Modbus协议的应用层面.终于有人把Modbus说明白了那么,今天跟大家聊聊关于Modbus协议报文的那些事. 一.真实案例 前段时间有个粉丝朋友,让我帮他解 ...

  6. vue 赶鸭子上架入门笔记(一) 安装开发环境

    准备接手一个 vue 的前端项目,从零开始学习 vue.目标不高大上,能看得懂代码,能进行简单的修改,改完能打包和部署. 首先解决 vue 开发环境的准备.访问 Node.js 官方网站,下载适合你操 ...

  7. Linux-USB驱动笔记-Gadget Function驱动

    1.前言 在Linux-USB驱动笔记(四)–USB整体框架中有説到Gadget Function驱动,下面我们来具体看一下. Gadget Function就是指设备的功能,比如作为U盘,需要文件存 ...

  8. C# 并发控制框架:单线程环境下实现每秒百万级调度

    前言 在工业自动化和机器视觉领域,对实时性.可靠性和效率的要求越来越高.为了满足这些需求,我们开发了一款专为工业自动化运动控制和机器视觉流程开发设计的 C# 并发流程控制框架. 该框架不仅适用于各种工 ...

  9. C#使用Kubernetes (k8s)

    在C#中使用Kubernetes (k8s) 通常通过官方的Kubernetes .NET客户端与Kubernetes API进行交互.以下是如何在C#中使用Kubernetes的简要指南. 1. 安 ...

  10. Windows 非服务器版本永久关闭命令行“快速编辑模式”

    使用管理员权限运行cmd.exe 运行如下命令: reg add HKEY_CURRENT_USER\Console /v QuickEdit /t REG_DWORD /d 00000000 /f