Go에서 파일 이름에 대한 규칙은 무엇입니까?


114

Go에서 패키지 이름 지정 규칙을 찾을 수 있습니다. 단어 사이에 밑줄이없고 모두 소문자입니다.

이 규칙이 파일 이름에도 적용됩니까?

Java 클래스에서했던 것처럼 하나의 파일에 하나의 구조체를 넣은 다음 구조체 뒤에 파일 이름을 지정합니까?

현재 struct WebServer가 있으면 web_server.go 파일에 넣습니다.


3
AFAIK는 규칙이 없지만 _ 접미사는 앞으로 특별한 의미를 가질 수 있으므로 피하는 것이 좋습니다.
fuz

답변:


126

따라야 할 몇 가지 지침이 있습니다.

  1. "."로 시작하는 파일 이름 또는 "_"는 이동 도구에서 무시됩니다.
  2. 접미사 _test.go가 있는 파일 은 go test도구에 의해서만 컴파일되고 실행됩니다 .
  3. OS 및 아키텍처 특정 접미사가있는 파일은 자동으로 동일한 제약 조건을 따릅니다. 예를 들어 name_linux.goLinux name_amd64.go에서만 빌드되고 amd64에서만 빌드됩니다. 이것은 //+build amd64파일 맨 위에 줄 이있는 것과 같습니다.

자세한 내용은 도구에 대한 문서를 go build참조하십시오. https://golang.org/pkg/go/build/


3
이 문서는 어디에 있습니까? 감사!
Abhijeet Rastogi


3
unix및 .NET 용으로 빌드하려면 어떻게해야합니까 others? 예를 들어 두 개의 파일을 만들 수 file_windows.go있고file_others.go . 잘 작동합니다. 그러나 위해 file_unix.go그리고 file_others.go그것은 '작업을 does'n. 8 개의 파일을 만들고 싶지 않습니다 darwin freebsg linux openbsd netbsd dragonfly solaris android.
Ivan Black

3
@Fire : 일관성과 대소 문자를 구분하지 않는 파일 시스템이있는 시스템 모두 파일 이름은 일반적으로 모두 소문자입니다.
JimB

1
@IvanBlack과 동일한 질문을 가진 사람은 빌드 태그를 사용하여 수행 할 수 있습니다. 이를 수행하는 방법에 대한 멋진 개요를 보려면 여기를 참조하십시오. dave.cheney.net/2013/10/12/…
Ian Gustafson

30

JimB가 제공 하는 답변 외에도 일반 파일 이름은 소문자이고 짧으며 어떤 종류의 밑줄이나 공백도 없습니다. 일반적으로 파일 이름은 패키지 이름과 동일한 규칙을 따릅니다. Effective Go패키지 이름 섹션을 참조하십시오 .

좋은 예 는 strconv 패키지 를 참조하십시오 .


3
긴 파일에 이름을 부여한 것은 무엇입니까? mycommandsub1command.go또는 my_command_sub1command.go, 그리고 mycommandVO
어떨까요

9
긴 이름에는 밑줄을 제안합니다. 좋은 프로젝트에서 이것을 보았습니다.
아비

17

Go는 패키지 내에서 코드를 구성하는 방법 측면에서 매우 자유 롭습니다. 일반적으로 코드의 가독성과 이해를 향상시키는 것은 무엇이든 상관 없습니다. 이것이 어떻게 수행되는지 배우는 가장 좋은 방법은 마스터를 연구하는 것입니다. 즉, 표준 라이브러리를 살펴 보는 것입니다.

http://golang.org/src/pkg/

그러나 생각할 수있는 두 가지 규칙이 있습니다. 다른 플랫폼 용으로 컴파일 할 코드를 지정할 때 플랫폼 이름을 접미사로 사용합니다.

mypkg_linux.go         // only builds on linux systems
mypkg_windows_amd64.go // only builds on windows 64bit platforms

또한라는 server.go파일이있는 경우 해당 파일에 대한 테스트는 server_test.go.



1
나는 그들이 미래에 _front, _writer또는 _bits중요한 접미사를 사용하지 않을 것이라고 생각합니다 !
Matt Harrison

저는 Go를 좋아하지만이 go도구는 패키지 구조에 대해 매우 제한적입니다 (언어에 대해 제가 가장 좋아하는 것 중 하나입니다). 매우 구체적인 규칙을 선호합니다 (폴더 당 하나의 패키지 [적어도 하나의 예외 포함]), 폴더의 패키지는 폴더와 동일한 이름을 공유합니다 [최소한 하나의 예외 포함], 전체 패키지 가져 오기 경로가의 상대 경로와 일치하고 $GOPATH, 일부 파일은 이름 형식 등에 따라 다르게 취급 됨)
weberc2 2014-08-06

1
@ weberc2 제한 사항은 Latex와 유사합니다. 첫째, 작성해야 할 모든 것이 좋은 콘텐츠라는 것을 깨달을 때까지 레이아웃 및 기타 관련없는 세부 사항을 제어하고 싶었습니다. 마찬가지로 Go를 사용하면 좋은 코드를 작성하고 다른 세부 정보를 처리 할 수 ​​있습니다.
david

@david 동의합니다. 돌이켜 보면 나는 불분명했다. 나는 응답자의 진술에 응답하고 있었다 Go is quite liberal in terms of how you organise your code within a package. Go는 자유롭지 않고 매우 제한적입니다. 그러나 그것은 좋은 일입니다.
weberc2

8

일반적으로 파일 이름의 밑줄은 플랫폼 / 아치 전용 코드를 할당하는 데 사용됩니다. 예를 들면 다음과 같습니다.

 cd $GOROOT/src/pkg/math/
 ls sqrt*s
sqrt_386.s  sqrt_amd64p32.s  sqrt_amd64.s  sqrt_arm.s

sqrt_386.s32 비트 프로세서, sqrt_amd64.samd64 등 의 컴파일러에서만 읽을 수 있습니다 .

그것의 유효한 값 중 하나 일 수있는 GOOS및 / 또는 GOARCH( 심판 .

file_windows_amd64.go win64에서만 컴파일됩니다.

당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.