당신의 모든 상황은 준비되었습니까?추천 코드 정적 분석
5734 단어 Go
동기
이런 칸의 유형과 상수 목록이 있다고 가정해 보세요.
a/a.gopackage a
type TestKind int
const (
TestKindHoge TestKind = iota
TestKindFuga
TestKindPiyo
)
이른바 열거하거나 구분하는 녀석이니 스위치를 쓰겠지.
sample.goswitch v {
case a.TestKindHoge:
// do something
case a.TestKindFuga:
// do something
case a.TestKindPiyo:
// do something
}
에서 기술한 장면은 다음과 같은 절차를 이용하여 명세표를 작성하여 개념 디자인에서 체량의 부피를 분석하도록 한다.
a/a.gopackage 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 vet
과golint
같은 컴파일 전의 코드 정적 분석을 검출할 수 있습니까?
생각났어.
위의 패키지를 사용하면 Go의 정적 분석 도구를 만들 수 있습니다. (그리고 Go1.12는 govet로 호출할 수 있을 것 같습니다.)
마침 일본의 고정태 해석 전도사@tenntenn 씨가 알기 쉬운 기사를 썼어요!
Go에서 모듈식 정적 분석 정보
모듈화 정적 분석을 시도하다
본고는 분석 소프트웨어 패키지에 대한 상세한 내용을 생략하고 상술한 제작 도구를 소개한다.
allcases 검사기
그래서 했어요.
allcases
설치
$ go get github.com/knightso/allcases/cmd/allcases
사용 방법
$ allcases [-flag] [package]
package a
type TestKind int
const (
TestKindHoge TestKind = iota
TestKindFuga
TestKindPiyo
)
switch v {
case a.TestKindHoge:
// do something
case a.TestKindFuga:
// do something
case a.TestKindPiyo:
// do something
}
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 vet
과golint
같은 컴파일 전의 코드 정적 분석을 검출할 수 있습니까?생각났어.
위의 패키지를 사용하면 Go의 정적 분석 도구를 만들 수 있습니다. (그리고 Go1.12는 govet로 호출할 수 있을 것 같습니다.)
마침 일본의 고정태 해석 전도사@tenntenn 씨가 알기 쉬운 기사를 썼어요!
Go에서 모듈식 정적 분석 정보
모듈화 정적 분석을 시도하다
본고는 분석 소프트웨어 패키지에 대한 상세한 내용을 생략하고 상술한 제작 도구를 소개한다.
allcases 검사기
그래서 했어요.
allcases
설치
$ go get github.com/knightso/allcases/cmd/allcases
사용 방법
$ allcases [-flag] [package]
$ go get github.com/knightso/allcases/cmd/allcases
$ allcases [-flag] [package]
go/analysis
에서 계승되며 필수적인 것이 아니다.관심 있는 사람은 allcases -help
에서 검사메모
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 필드로 설정하여 사용할 수 있습니다(^^)
Reference
이 문제에 관하여(당신의 모든 상황은 준비되었습니까?추천 코드 정적 분석), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다 https://qiita.com/hogedigo/items/de9a1c53519aedfdc8ae텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념 (Collection and Share based on the CC Protocol.)