당신의 모든 상황은 준비되었습니까?추천 코드 정적 분석

5734 단어 Go

동기


이런 칸의 유형과 상수 목록이 있다고 가정해 보세요.
a/a.go
package a

type TestKind int

const (
    TestKindHoge TestKind = iota
    TestKindFuga
    TestKindPiyo
)
이른바 열거하거나 구분하는 녀석이니 스위치를 쓰겠지.
sample.go
switch v {
case a.TestKindHoge:
    // do something
case a.TestKindFuga:
    // do something
case a.TestKindPiyo:
    // do something
}
에서 기술한 장면은 다음과 같은 절차를 이용하여 명세표를 작성하여 개념 디자인에서 체량의 부피를 분석하도록 한다.
a/a.go
package a

type TestKind int

const (
    TestKindHoge TestKind = iota
    TestKindFuga
    TestKindPiyo
    TestKindBosukete // Add!
)
그때 스위치 문장의 케이스가 추가로 누락되어 무의식적인 행동이 되지 않을까요.
switch v {
case a.TestKindHoge:
    // do something
case a.TestKindFuga:
    // do something
case a.TestKindPiyo:
    // do something
default:
    panic("unexpected")
}
그렇다면 최악의 운행 시 검출될 수 있고, 가능하다면 구축 시 검출하고 싶습니다.

정적 분석

go vetgolint 같은 컴파일 전의 코드 정적 분석을 검출할 수 있습니까?
생각났어.
위의 패키지를 사용하면 Go의 정적 분석 도구를 만들 수 있습니다. (그리고 Go1.12는 govet로 호출할 수 있을 것 같습니다.)
마침 일본의 고정태 해석 전도사@tenntenn 씨가 알기 쉬운 기사를 썼어요!
Go에서 모듈식 정적 분석 정보
모듈화 정적 분석을 시도하다
본고는 분석 소프트웨어 패키지에 대한 상세한 내용을 생략하고 상술한 제작 도구를 소개한다.

allcases 검사기


그래서 했어요.
allcases

설치

$ go get github.com/knightso/allcases/cmd/allcases

사용 방법

$ allcases [-flag] [package] 
  • flag는 모두go/analysis에서 계승되며 필수적인 것이 아니다.관심 있는 사람은 allcases -help에서 검사
  • 패키지 지정 gotool
  • 메모


    switch 문장에 // allcases 주석을 덧붙여서 평가할 값 유형의 모든 상량의case를 포괄했는지 확인합니다.
    sample.go
    // allcases
    switch v {
    case a.TestKindHoge:
        // do something
    case a.TestKindFuga:
        // do something
    case a.TestKindPiyo:
        // do something
    }
    
    출력 예제 ↓
    /src/sample/sample.go:36:2: no case of a.TestKindBosukete
    

    마지막


    나는 개인적으로 코드 정적 분석이 앞으로 열풍이 될 것이라고 생각하지만 go/analysis 패키지와 go1.12의 govet가 내장되어 있다는 말을 듣고 점점 확신이 생겼다.그나저나 혼자 지각하면 유행인가요?^^;)
    고vet와 고lint 등 준비된 유니버설 검사기만 사용하는 것이 아니라 개발자들이 각 프로젝트에 대한 맞춤형 linter와 analyzer를 쉽게 제작하여 생산성을 높이는 개발 방법도 유행하고 있다.
    마지막으로 또 하나는 이번 도구를 만들기 위해 @tenntenn 선생의 작품commentmap.Analyzer을 이용했습니다.감사합니다.
    https://github.com/tenntenn/comment
    주석 주석을 쉽게 분석할 수 있는 유틸리티 분석기Analyzer.Requires 필드로 설정하여 사용할 수 있습니다(^^)

    좋은 웹페이지 즐겨찾기