The Go Programming Language Specification - The Go Programming Language

콘텐츠

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 … ba부터 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" .

어휘 요소

주석은 프로그램 설명으로 사용됩니다. 두 가지 형태가 있습니다:

  1. _라인 주석_은 문자 시퀀스 //로 시작하여 줄 끝에서 끝납니다.
  2. _일반 주석_은 문자 시퀀스 /*로 시작하여 첫 번째 이후의 문자 시퀀스 */로 끝납니다.

rune 또는 string literal 내부 또는 주석 내부에서는 주석을 시작할 수 없습니다. 새 줄이 없는 일반 주석은 공백처럼 작동합니다. 다른 모든 주석은 새 줄처럼 작동합니다.

토큰

토큰은 Go 언어의 어휘를 형성합니다. 식별자, 키워드, 연산자 및 구두점, _리터럴_의 네 가지 클래스가 있습니다. 공백은 (U+0020) 공백, 수평 탭 (U+0009), 캐리지 리턴 (U+000D) 및 새 줄 (U+000A)로 형성되며, 그 외에는 무시됩니다. 그러나 이러한 공백은 그렇지 않으면 하나의 토큰으로 결합될 수 있는 토큰을 분리하는 용도로 사용됩니다. 또한, 새 줄이나 파일 끝은 세미콜론의 삽입을 유발할 수 있습니다. 토큰으로 입력을 분할하는 동안, 다음 토큰은 유효한 토큰을 형성하는 가장 긴 문자 시퀀스입니다.

세미콜론

공식 구문은 여러 프로덕션에서 종결자로 세미콜론 ";"을 사용합니다. Go 프로그램은 다음 두 규칙을 사용하여 대부분의 세미콜론을 생략할 수 있습니다:

  1. 입력이 토큰으로 분할될 때, 토큰이 다음 중 하나인 경우 행의 마지막 토큰 뒤에 세미콜론이 자동으로 삽입됩니다.
  2. 복잡한 문을 한 줄에 작성할 수 있도록, 닫는 ) 또는 } 앞에 세미콜론을 생략할 수 있습니다.
요약하다
Go는 시스템 프로그래밍을 고려하여 설계된 범용 언어이다. Go의 구문은 EBNF의 변형을 사용하여 명시되며, 소스 코드는 UTF-8로 인코딩된 유니코드 텍스트이다. 주석은 프로그램 설명으로 사용되며, 식별자, 키워드, 연산자 및 구두점, 리터럴 등이 토큰으로 구성된다. Go 프로그램은 대부분 세미콜론을 생략할 수 있으며, 예약어와 연산자 등이 있다.