이 페이지 http://golang.org/doc/go_faq.html 다음과 같이 씁니다.
Go에는 정적 유형이 있지만 언어는 일반적인 OO 언어보다 유형이 가벼워 지도록 시도합니다.
그래서 제 질문은 정확하게 제네릭 (C #과 같은)으로 입력하거나 느슨하게 입력 (자바 스크립트와 같이) 또는 옵션 (Vb.Net의 옵션 엄격한과 같이)입니다.
이 페이지 http://golang.org/doc/go_faq.html 다음과 같이 씁니다.
Go에는 정적 유형이 있지만 언어는 일반적인 OO 언어보다 유형이 가벼워 지도록 시도합니다.
그래서 제 질문은 정확하게 제네릭 (C #과 같은)으로 입력하거나 느슨하게 입력 (자바 스크립트와 같이) 또는 옵션 (Vb.Net의 옵션 엄격한과 같이)입니다.
답변:
타입 안전은 흑백 타입 안전이 아닙니다. 그것은 더 많은 스펙트럼이며 일부 언어는 다른 언어 보다 유형 이 더 안전 할 수 있습니다 (그 반대도 가능). 그러나 C #과 Javascript에 대해 생각하는 것은 정적 입력 (유형 검사가 컴파일 타임에 발생하는 경우) 대 동적 입력 (유형 검사가 런타임에 발생하는 경우) 일 것입니다. Go FAQ의 내용
Google Go는 정적으로 유형이 정해졌지만 여러 가지 기능으로 인해 (적어도 다소) 동적으로 유형이 "표시"됩니다. 예를 들어 클래스를 인터페이스 구현으로 명시 적으로 표시 할 필요는 없습니다. 클래스의 메소드 시그니처가 인터페이스의 메소드 시그니처와 일치하면 클래스는 해당 인터페이스 (오리 종 입력)를 자동으로 구현합니다. 이는 타사 라이브러리의 내장 클래스 및 클래스를 확장하는 데 유용합니다. 타사 클래스의 메소드와 일치하도록 인터페이스를 구성하면 자동으로 구현되기 때문입니다.
타입 안전은 실제로 타입 시스템의 다른 "축"입니다. 예를 들어, C는 형식이 안전하지 않은 정적으로 유형이 지정된 언어입니다. 포인터를 사용하면 프로그램을 중단시킬 수있는 것까지 원하는대로 수행 할 수 있습니다. Javascript는 동적으로 입력되지만 형식이 안전합니다. 프로그램을 중단시키는 작업을 수행 할 수 없습니다. C #은 대부분 형식이 안전하지만 unsafe
더 이상 형식이 안전하지 않은 코드 영역을 명시 적으로 표시 할 수 있습니다.
Google Go는 형식에 문제가 없으며 프로그램에 충돌을 일으킬 수 없다는 점에서 형식에 안전합니다 (포인터에 직접 액세스하지 않음).
형식은 잘못 해석되지 않으므로 안전하게 입력되지만 형식이 잘못되면 프로그램이 패닉 상태가 될 수 있습니다.
Go의지도 유형은 스레드로부터 안전 하지 않으며 정적으로 유형이 지정됩니다. 형식 상속, 일반 프로그래밍, 어설 션, 메서드 오버로드 또는 포인터 산술 이 없으며 적절한 이유가 없습니다.
유형 안전 및 메모리 안전은 장기적인 목표이며 여기서 문제가 있습니다.
형식 안전은 허용 가능한 킬로바이트 및 메가 바이트 단위의 오버 헤드를 나타냅니다. Go는 MapReduce 및 "빅 데이터"로 설계되었으며, 페타 바이트 단위의 데이터를 엑소 바이트로 표시합니다.이 형식은 유형 안전성과 성능 문제를 나타내며, 유형 검사 (복싱 / 언 박싱)로 인해 오버 헤드가 발생하고 처리에서주기가 걸립니다.
유형 안전은 하위 입력 및 다형성 및 오리 입력 (객체에 캐스트)에서 제한적일 수 있으며, 이로 인해 위험과 Go와 같은 언어가 큰 이점을 제공하는 공간이 생성됩니다. C ++ 및 Java는 Go로 대체되지 않으며 분산 프로그래밍 및 대규모 병렬 시스템을 지원하는 새로운 언어입니다.
브루스 에켈 (Bruce Eckel)은 "C ++이 원래 해결하려고했던 문제의 종류에 대해 훨씬 더 의미가있다"고 큰 진술을 논할 수있다. C ++은 매우 효율적인 언어이며 MapReduce의 Boost 구현은 매우 효율적입니다.
동시성 프리미티브는 미래입니다. 타입 안전성은 항상 매우 논쟁적인 주제였으며 Go는 아마도 20 년 또는 Algol 이후이 문제를 해결 한 최초의 언어 일 것입니다.