Go의 import 순서가 궁금하신가요?
goimports는tools의 명령입니다. Go의 프로그램에서 사용하는 import에 빈 줄을 추가합니다. 쓸데없는 줄을 제외하고 순서를 정리합니다.
Go 개발에 없어서는 안 될 도구 중 하나이기 때문에 Gopher 여러분들은 일상생활에서 많은 보살핌을 받고 있다고 생각합니다.
import 순서 정보
성형 후의 import 순서는 기본적으로 칸막이를 한다
-local
옵션으로 지정된 패키지어떤 포장이 위 조합에 속하는지 확인하면 매우 간단해집니다.
// importToGroup is a list of functions which map from an import path to
// a group number.
var importToGroup = []func(localPrefix, importPath string) (num int, ok bool){
func(localPrefix, importPath string) (num int, ok bool) {
if localPrefix == "" {
return
}
for _, p := range strings.Split(localPrefix, ",") {
if strings.HasPrefix(importPath, p) || strings.TrimSuffix(p, "/") == importPath {
return 3, true
}
}
return
},
func(_, importPath string) (num int, ok bool) {
if strings.HasPrefix(importPath, "appengine") {
return 2, true
}
return
},
func(_, importPath string) (num int, ok bool) {
firstComponent := strings.Split(importPath, "/")[0]
if strings.Contains(firstComponent, ".") {
return 1, true
}
return
},
}
func importGroup(localPrefix, importPath string) int {
for _, fn := range importToGroup {
if n, ok := fn(localPrefix, importPath); ok {
return n
}
}
return 0
}
판별 그룹의 함수는 int형을 되돌려줍니다. 0은 첫 번째, 1은 두 번째 순서입니다.
좀 재밌는 건
appengine
접두사가 달린 포장만 특별 처리하는 건가요?앱피니언을 사용해 본 적이 없어 잘 모르겠지만, 현재google.golang.org/appengine
포장이 더 새로운 포장처럼 느껴져 구시대가 남긴 것 같다.3개가 아니라 4개 이상으로 나누려는 사람도 있을 수 있지만 그런 경우에는 goimports-reviser 같은 외부 도구를 사용한다.
빈 줄 들어갈 때의 import 순서
그러나 상술한 import 순서가 공행으로 들어가면 우습게 변한다.예를 들면 다음과 같습니다.
import (
"fmt"
"strings"
"github.com/google/go-cmp/cmp"
"strconv"
)
느낌상 표준포장의 세 가지를 모아서 외부포장만 분리하고 싶으므로 아래와 같이 하시기 바랍니다.import (
"fmt"
"strings"
"strconv"
"github.com/google/go-cmp/cmp"
)
그러나 실제 상황은 다음과 같다.import (
"fmt"
"strings"
"strconv"
"github.com/google/go-cmp/cmp"
)
이것은 빈 줄뿐만 아니라 주석을 삽입해도 마찬가지다.이 문제에 대해 오랫동안 아래의 issue에서 토론을 진행해 왔다. 어떤 사람은 자신의 작품을 제작한ort goimports를, 또 어떤 사람은 gooimports에 옵션을 추가하여 통제하자고 제안했지만 goimports의 규격은 여전히 결정되지 않았다.
왜 이렇게 말할까, 나는 이 평론이 원본이 아니라고 생각한다. 나는 goimports의 가장 주요한 원인은 코드 스타일을 바로잡고 싶지 않기 때문이라고 생각한다.
import 순서에 신경을 써야 하나요?
Go 호스트 코드를 봤더라도 반드시 import 순서대로 그룹을 나누는 것은 아니다.
하지만 저는 지금까지 Go팀에서 개발해 왔고 일정 수량의 Gopher가 import 순서에 신경을 쓴다고 생각합니다.한편, import 순서는 다르지만 코드의 동작에도 영향을 주지 않기 때문에 import 순서를 의식하지 않는 Gopher는 다수파일 것이다.
특히 팀 개발의 경우 팀 전체 구성원이 import 순서를 지키지 않으면 어딘가에서 무너지기 때문에 import 순서 홍보만 수정하면 되고, 개발과 무관한 부분에서도 노동력이 생기기 때문에 리더가 강제하지 않는 한 계속 관심을 가지기 어렵다.
자신도 반드시 import을 통일해야 하는 그룹의 도구gouper를 만들어 보았지만, 그다지 사용할 수 없었다.
강제하고 싶은 사람이 있다면 상기 issue에도 있는 이쪽 도구gosimports 등을 사용하는 것이 좋지 않겠습니까
덤
그나저나 제가 애용하는 골랜드가 import 부분을 생략했기 때문에 import 순서가 이상해져도 알아채기 힘들어요.
Reference
이 문제에 관하여(Go의 import 순서가 궁금하신가요?), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다 https://zenn.dev/tommy/articles/7de1b702d765fa텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념 (Collection and Share based on the CC Protocol.)