2023년 8월 2일 버전
소개
이것은 Go 프로그래밍 언어의 참조 매뉴얼입니다. 제네릭이 없는 Go1.18 이전 버전은 여기에서 찾을 수 있습니다. 더 많은 정보와 다른 문서는 golang.org를 참조하세요.
Go는 시스템 프로그래밍을 염두에 두고 설계된 범용 언어입니다. 강력한 타입 시스템과 가비지 컬렉션을 갖추고 있으며 동시성 프로그래밍을 명시적으로 지원합니다. 프로그램은 의존성을 효율적으로 관리할 수 있도록 속성을 갖춘 _패키지_로 구성됩니다.
구문은 간결하고 해석하기 쉬워서 통합 개발 환경과 같은 자동화 도구에 의한 쉬운 분석이 가능합니다.
표기
구문은 확장된 바커스-나우어 형식(EBNF)의 변형을 사용하여 지정됩니다: variant
Syntax = { Production } . Production = production_name "=" [ Expression ] "." . Expression = Term { "|" Term } . Term = Factor { Factor } . Factor = production_name | token [ "…" token ] | Group | Option | Repetition . Group = "(" Expression ")" . Option = "[" Expression "]" . Repetition = "{" Expression "}" .
Productions는 우선 순위가 증가하는 다음 연산자와 용어로 구성된 표현입니다:
| alternation () grouping [] option (0 또는 1 회) {} repetition (0부터 n 회)
소문자로 된 프로덕션 이름은 어휘(터미널) 토큰을 식별하는 데 사용됩니다. 비터미널은 카멜케이스로 작성됩니다. 어휘 토큰은 이중 인용부호 ""
또는 역따옴표 ``
로 둘러싸여 있습니다.
형식 a … b
은 a
부터 b
까지의 문자 집합을 대안으로 나타냅니다. 수평 줄임표 …
는 명시적으로 지정되지 않은 다양한 열거나 코드 조각을 비공식적으로 나타내기 위해 사양의 다른 곳에서도 사용됩니다. Go 언어의 토큰이 아닌 문자 …
(세 개의 문자 ...
과 대조적으로)는 Go 언어의 토큰이 아닙니다.
소스 코드 표현
소스 코드는 UTF-8로 인코딩된 유니코드 텍스트입니다. 텍스트는 정규화되지 않으므로 단일 강세 부호 코드 포인트는 강세 부호와 글자를 결합한 동일한 문자와 구별됩니다. 이들은 두 개의 코드 포인트로 처리됩니다. 간단히 말해서, 이 문서에서는 소스 텍스트의 유니코드 코드 포인트를 가리키는 데 사용되는 용어 '문자'를 사용할 것입니다.
각 코드 포인트는 구별됩니다. 예를 들어 대문자와 소문자는 다른 문자입니다.
구현 제한: 다른 도구와의 호환성을 위해 컴파일러는 소스 텍스트에서 널 문자 (U+0000)을 허용하지 않을 수 있습니다.
구현 제한: 다른 도구와의 호환성을 위해 컴파일러는 소스 텍스트에서 UTF-8로 인코딩된 바이트 순서 표시 (U+FEFF)가 첫 번째 유니코드 코드 포인트인 경우 무시할 수 있습니다. 다른 곳에서 바이트 순서 표시를 사용하는 것이 금지될 수 있습니다.
캐릭터
다음 용어들은 특정한 유니코드 문자 범주를 나타내는 데 사용됩니다:
newline = /* the Unicode code point U+000A / . unicode_char = / an arbitrary Unicode code point except newline / . unicode_letter = / a Unicode code point categorized as "Letter" / . unicode_digit = / a Unicode code point categorized as "Number, decimal digit" */ .
유니코드 표준 8.0에서는 4.5절 '일반 범주'에서 문자 범주의 집합을 정의합니다. Go는 Lu, Ll, Lt, Lm 또는 Lo 중 하나의 문자 범주에 속하는 모든 문자를 유니코드 문자로 취급하며, 숫자 범주인 Nd에 속하는 문자를 유니코드 숫자로 취급합니다.
글자와 숫자
밑줄 문자 _
(U+005F)은 소문자로 간주됩니다.
letter = unicode_letter | "_" . decimal_digit = "0" … "9" . binary_digit = "0" | "1" . octal_digit = "0" … "7" . hex_digit = "0" … "9" | "A" … "F" | "a" … "f" .
어휘 요소
주석은 프로그램 설명으로 사용됩니다. 두 가지 형태가 있습니다:
- _라인 주석_은 문자 시퀀스
//
로 시작하여 줄 끝에서 끝납니다. - _일반 주석_은 문자 시퀀스
/*
로 시작하여 첫 번째 이후의 문자 시퀀스*/
로 끝납니다.
rune 또는 string literal 내부 또는 주석 내부에서는 주석을 시작할 수 없습니다. 새 줄이 없는 일반 주석은 공백처럼 작동합니다. 다른 모든 주석은 새 줄처럼 작동합니다.
토큰
토큰은 Go 언어의 어휘를 형성합니다. 식별자, 키워드, 연산자 및 구두점, _리터럴_의 네 가지 클래스가 있습니다. 공백은 (U+0020) 공백, 수평 탭 (U+0009), 캐리지 리턴 (U+000D) 및 새 줄 (U+000A)로 형성되며, 그 외에는 무시됩니다. 그러나 이러한 공백은 그렇지 않으면 하나의 토큰으로 결합될 수 있는 토큰을 분리하는 용도로 사용됩니다. 또한, 새 줄이나 파일 끝은 세미콜론의 삽입을 유발할 수 있습니다. 토큰으로 입력을 분할하는 동안, 다음 토큰은 유효한 토큰을 형성하는 가장 긴 문자 시퀀스입니다.
세미콜론
공식 구문은 여러 프로덕션에서 종결자로 세미콜론 ";"
을 사용합니다. Go 프로그램은 다음 두 규칙을 사용하여 대부분의 세미콜론을 생략할 수 있습니다: