2017-10-17 2 views
-4
Golang 사양에서

: 그들의 입력하면 두라는 이름의 유형이 동일 :서로 다른 이유

type (
    T0 []string 
    T1 []string 
) 

그들이 구별를 가지는 형태를 이름 때문에 규칙이 declarations.but T0와 T1이 다른 말한다 이름은 동일한 TypeSpec에서 비롯됩니다. T0과 T1이 다른 이유는 무엇입니까?


EDIT :

사양에

또한 말한다

A 형 선언은 기존과 동일한 기본 유형을 갖는 새로운 유형 에 식별자, 형명, 결합 유형 및 조작 이 기존 유형에 대해 정의 된 경우에도 새 유형에 대해 정의됩니다. 새 유형이 기존 유형과 다릅니다.

+0

@JimB : "두 요소 유형이 동일한 경우 두 슬라이스 유형이 동일합니다." 정의 된 유형에 대해서는 사실이 아닙니다 : [유형 신원] (https://golang.org/ref/spec#Type_identity). '정의 된 타입은 항상 다른 타입과 다릅니다. ' – peterSO

+1

@shx : Go 프로그래밍 언어 사양의 현재 버전은 https://golang.org/ref/spec에 있습니다. 어디에서 견적을 얻고 있습니까? – peterSO

+0

@peterSO, 그렇습니다. 답을 아는 것이 아니라, 처음부터 그 인용구가 어디에서 왔는지, 왜 이것이 질문인지를 파악하려고했습니다. – JimB

답변

1

을 감안할 때 :

type (
    T0 []string 
    T1 []string 
) 

의 이동 프로그래밍 언어 년 6 월 28 사양

버전 2017 유형 정의는 같은 로 새로운 구별 유형을 생성

기본 유형 및 연산을 지정된 유형으로 정의하고 식별자를에 바인드합니다. 그것.

TypeDef = identifier Type . 

새 유형을 정의 된 유형이라고합니다. 다른 유형과는 다른 유형으로, 생성 된 유형을 포함합니다.

정의 된 유형은 항상 다른 유형과 다릅니다. 그렇지 않으면 두 개의 유형이 기본 유형 리터럴이 구조적으로 에 해당하는 경우 동일합니다. 즉, 이들은 동일한 리터럴 구조를 가지며 해당 구성 요소에는 동일한 유형이 있습니다.

T0와 T1은 정의 된 유형이므로 서로 다릅니다.


참조 :

6 월 28

The Go Programming Language Specification

버전 2017

Types

유형 조작 및 방법함께 일련의 값을 결정 해당 값과 관련된. 유형은 에 유형 이름이 표시되거나 유형이 기존 유형 인 유형 리터 2을 사용하여 지정 될 수 있습니다.

부울, 숫자 및 문자열 형식의 명명 된 인스턴스는 이 미리 선언됩니다. 다른 이름 지정된 유형이 유형 선언과 함께 도입됩니다.

Type declarations

는 타입 선언은 유형 식별자 유형 이름을 결합한다. 형식 은 별칭 선언과 형식 의 두 가지 형식으로 제공됩니다.

TypeDecl = "type" (TypeSpec | "(" { TypeSpec ";" } ")") . 
TypeSpec = AliasDecl | TypeDef . 

별칭 선언

별명 선언은 주어진 타입 식별자를 결합한다. 식별자의 범위

AliasDecl = identifier "=" Type . 

, 그것은 형 별명로서 기능한다.

타입 정의

유형 정의가 지정된 형태와 동일한 기본 타입 동작으로 새로운 구별 유형을 생성하고, 그것으로 식별자를 결합한다.

TypeDef = identifier Type . 

새 유형을 정의 된 유형이라고합니다. 다른 유형과는 다른 유형으로, 생성 된 유형을 포함합니다.

Type identity

두 유형은 동일하거나 상이하다.

정의 된 유형은 항상 다른 유형과 다릅니다. 그렇지 않으면 두 개의 유형이 기본 유형 리터럴이 구조적으로 에 해당하는 경우 동일합니다. 즉, 이들은 동일한 리터럴 구조를 가지며 해당 구성 요소에는 동일한 유형이 있습니다.