나는 Go를 배우고 있지만 컴파일 할 때 변수 나 패키지를 사용하지 않은 채두면 안된다고 생각합니다.
이것은 정말로 나를 느리게합니다. 예를 들어 새 패키지를 선언하고 나중에 사용하거나 테스트 할 명령의 주석 처리를 제거하려고했습니다. 나는 항상 오류가 발생하고 그 모든 용도에 대해 언급해야합니다.
Go에서 이런 종류의 확인을 피할 수있는 방법이 있습니까?
나는 Go를 배우고 있지만 컴파일 할 때 변수 나 패키지를 사용하지 않은 채두면 안된다고 생각합니다.
이것은 정말로 나를 느리게합니다. 예를 들어 새 패키지를 선언하고 나중에 사용하거나 테스트 할 명령의 주석 처리를 제거하려고했습니다. 나는 항상 오류가 발생하고 그 모든 용도에 대해 언급해야합니다.
Go에서 이런 종류의 확인을 피할 수있는 방법이 있습니까?
답변:
이 오류는 더 나은 코드를 작성하고 선언하거나 가져 오는 모든 것을 사용해야합니다. 다른 사람들이 작성한 코드를 더 쉽게 읽을 수있게하고 (선언 된 모든 변수가 사용될 것임을 항상 확신하고) 가능한 코드를 피하십시오.
그러나이 오류를 정말로 건너 뛰려면 빈 식별자 ( _
)를 사용할 수 있습니다 .
package main
import (
"fmt" // imported and not used: "fmt"
)
func main() {
i := 1 // i declared and not used
}
된다
package main
import (
_ "fmt" // no more error
)
func main() {
i := 1 // no more error
_ = i
}
아래 의견에서 kostix가 말한 것처럼 FAQ에서 Go 팀의 공식 위치를 찾을 수 있습니다 .
사용하지 않는 변수가 있으면 버그가 표시 될 수 있지만 사용하지 않는 가져 오기는 컴파일 속도가 느려집니다. 코드 트리에서 사용하지 않은 가져 오기를 충분히 누적하면 속도가 느려질 수 있습니다. 이러한 이유로 Go는 둘 다 허용하지 않습니다.
이를 위해 간단한 "널 함수"를 사용할 수 있습니다.
func Use(vals ...interface{}) {
for _, val := range vals {
_ = val
}
}
다음과 같이 사용할 수 있습니다.
package main
func main() {
a := "declared and not used"
b := "another declared and not used"
c := 123
Use(a, b, c)
}
이를 위한 패키지도 있으므로 Use
매번 함수 를 정의 할 필요가 없습니다 .
import (
"github.com/lunux2008/xulu"
)
func main() {
// [..]
xulu.Use(a, b, c)
}
FAQ 에 따르면 :
일부는 검사를 끄거나 적어도 경고로 줄이기 위해 컴파일러 옵션을 요청했습니다. 그러나 컴파일러 옵션은 언어의 의미에 영향을 미치지 않아야하고 Go 컴파일러는 경고를보고하지 않으며 컴파일을 방해하는 오류 만보고하므로 이러한 옵션은 추가되지 않았습니다.
경고가없는 데는 두 가지 이유가 있습니다. 첫째, 불평 할 가치가 있다면 코드를 수정하는 것이 좋습니다. 두 번째로, 컴파일러가 경고를 생성하게하면 컴파일시 노이즈가 발생할 수있는 약한 경우에 대해 경고하여 수정해야하는 실제 오류를 마스킹 할 수 있습니다.
나는 여러 가지 이유로 들어갈 가치가 없다는 것에 반드시 동의하지는 않습니다. 그것이 무엇이며 가까운 장래에는 변하지 않을 것입니다.
패키지 goimports
에는 누락 된 패키지를 자동으로 추가하고 사용하지 않는 패키지를 제거 하는 도구가 있습니다. 예를 들면 다음과 같습니다.
# Install it
$ go get golang.org/x/tools/cmd/goimports
# -w to write the source file instead of stdout
$ goimports -w my_file.go
Vim과 같은 중간 정도의 편집기에서 이것을 실행할 수 있어야합니다.
:!goimports -w %
이 goimports
페이지에는 다른 편집기에 대한 일부 명령이 나열되며 일반적으로 버퍼를 디스크에 저장할 때 자동으로 실행되도록 설정합니다.
참고 goimports
또한 실행됩니다gofmt
.
이미 언급했듯이 변수의 가장 쉬운 방법은 (일시적으로) 변수를 할당하는 것입니다 _
.
// No errors
tasty := "ice cream"
horrible := "marmite"
// Commented out for debugging
//eat(tasty, horrible)
_, _ = tasty, horrible
지금까지 언급되지 않은 한 가지 각도는 코드 편집에 사용되는 도구 세트입니다.
사용 의 Visual Studio 코드 의 확장과 함께 lukehoban 라는 Go
당신을 위해 몇 가지 자동 마술을 할 것입니다. 이동 확장자가 자동으로 실행 gofmt
, golint
등, 그리고 삭제는 추가 import
항목을 . 적어도 그 부분은 이제 자동입니다.
나는 그 질문에 대한 해결책의 100 %가 아니라는 점을 인정하지만 충분히 유용 할 것입니다.