TypeScript/JavaScript의 렌즈를 통해 이해하기

DDD
풀어 주다: 2024-10-26 05:29:02
원래의
707명이 탐색했습니다.

Understanding Go through the Lens of TypeScript/JavaScript

TypeScript/JavaScript 경력이 있고 Go에 빠져 있다면 두 언어 간의 유사점을 찾아 학습 속도를 높이는 것이 도움이 될 수 있습니다. Go는 정적으로 유형이 지정되고 컴파일되는 언어이고 TypeScript/JavaScript는 동적으로 유형이 지정되고 해석되거나 트랜스파일되는 언어라는 점에서 근본적으로 다르지만 Go를 더욱 직관적으로 만드는 데 도움이 되는 몇 가지 유용한 비유가 있습니다.

1. Go의 구조체 ≒ TypeScript의 유형

TypeScript에서는 객체의 모양을 설명하기 위해 유형과 인터페이스를 정의합니다. 마찬가지로 Go에는 사용자 정의 유형을 정의하는 데 사용되는 구조체가 있습니다. TypeScript 유형이나 인터페이스가 다양한 속성을 포함할 수 있는 것과 유사하게 구조체에는 다양한 유형의 필드가 포함될 수 있습니다.

타입스크립트:

type Book = {
  title: string;
  pages: number;
  read(): void;
}
로그인 후 복사
로그인 후 복사

이동:

type Book struct {
    Title string
    Pages int
}

func (b Book) Read() {
    fmt.Println("Reading", b.Title)
}
로그인 후 복사
로그인 후 복사
로그인 후 복사
로그인 후 복사

두 경우 모두 객체의 구조를 정의합니다. 그러나 Go의 구조체는 인터페이스와 클래스 상속을 통해 더 동적인 동작을 허용하는 TypeScript와 달리 더 엄격하고 상속을 지원하지 않습니다.

2. Go의 메소드: 수신자 ≒ JavaScript의 프로토타입

JavaScript에서는 객체의 프로토타입에 메서드를 정의하면 해당 객체의 인스턴스와 연결됩니다. Go는 특정 구조체에 연결된 수신자 함수와 유사한 개념을 사용합니다. 이는 프로토타입을 통해 JavaScript의 객체에 함수가 첨부되는 방식과 유사합니다.

자바스크립트:

function Book(title, pages) {
    this.title = title;
    this.pages = pages;
}

Book.prototype.read = function() {
    console.log("Reading", this.title);
}
로그인 후 복사
로그인 후 복사

이동:

type Book struct {
    Title string
    Pages int
}

func (b Book) Read() {
    fmt.Println("Reading", b.Title)
}
로그인 후 복사
로그인 후 복사
로그인 후 복사
로그인 후 복사

Go에서 Read 메소드에는 JavaScript의 프로토타입과 메소드가 연관되는 방식과 유사하게 작동하는 수신자(b Book)가 있습니다. 이는 객체의 인스턴스(여기서는 b)를 제공하므로 필드에 액세스하고 메소드를 사용할 수 있습니다.

3. TypeScript의 let, var, const ≒ Go의 변수 선언

Go에서 변수를 선언하는 방식은 JavaScript의 let, var 및 const를 연상시킵니다. Go에서는 TypeScript와 마찬가지로 변수는 var로 선언되고 상수는 const로 선언됩니다.

타입스크립트:

let name: string = "TypeScript";
const maxItems: number = 100;
로그인 후 복사
로그인 후 복사

이동:

var name string = "Go"
const maxItems int = 100
로그인 후 복사
로그인 후 복사

Go의 := 약어는 빠른 변수 선언을 허용한다는 점에서 JavaScript의 허용과 다소 비슷합니다.

type Book = {
  title: string;
  pages: number;
  read(): void;
}
로그인 후 복사
로그인 후 복사

Go에서는 JavaScript처럼 let과 const 사이에 구분이 없습니다. 기본적으로 Go의 모든 변수는 var로 선언할 때 변경 가능합니다. 즉, 해당 값은 나중에 변경될 수 있습니다. Go에서 변수를 불변으로 만들려면 const 키워드를 명시적으로 사용해야 합니다. 변경 가능한 변수에는 let을, 변경 불가능한 변수에는 const를 사용하는 JavaScript와 달리 Go에서는 const로 선언하지 않는 한 모든 것이 변경 가능합니다.

4. Go 인터페이스 ≒ TypeScript 인터페이스(차이 있음)

TypeScript 인터페이스는 객체의 모양을 정의하는 반면 Go 인터페이스는 동작(즉, 객체가 가져야 하는 메서드 집합)을 정의합니다. Go에서 객체는 필요한 모든 메서드를 보유하여 암시적으로 인터페이스를 "구현"하는데, 이는 TypeScript의 명시적 구현과 대조됩니다.

타입스크립트:

type Book struct {
    Title string
    Pages int
}

func (b Book) Read() {
    fmt.Println("Reading", b.Title)
}
로그인 후 복사
로그인 후 복사
로그인 후 복사
로그인 후 복사

이동:

function Book(title, pages) {
    this.title = title;
    this.pages = pages;
}

Book.prototype.read = function() {
    console.log("Reading", this.title);
}
로그인 후 복사
로그인 후 복사

Go에서는 Read 메소드를 구현하는 모든 유형이 명시적으로 선언되지 않더라도 Reader 인터페이스를 구현하는 것으로 간주됩니다.

5. Go에서의 오류 처리 ≒ JavaScript의 Try-Catch(그러나 다름)

Go에서의 오류 처리는 JavaScript의 try-catch와 비교할 때 매우 다릅니다. Go에서는 오류 처리가 반환 값을 사용하여 명시적으로 수행되는 반면 JavaScript는 예외를 사용합니다.

자바스크립트:

type Book struct {
    Title string
    Pages int
}

func (b Book) Read() {
    fmt.Println("Reading", b.Title)
}
로그인 후 복사
로그인 후 복사
로그인 후 복사
로그인 후 복사

이동:

let name: string = "TypeScript";
const maxItems: number = 100;
로그인 후 복사
로그인 후 복사

Go에서는 오류가 함수에서 반환되고 명시적으로 확인해야 하므로 제어 흐름이 더 예측 가능하지만 JavaScript의 try-catch 메커니즘에 비해 수동 오류 처리가 더 많이 필요합니다.

6. Go의 패키지 시스템 ≒ TypeScript의 ES 모듈

TypeScript에서는 다른 기능을 가져오거나 내보낼 수 있는 모듈로 코드를 구성합니다. Go에는 각 파일이 패키지의 일부이고 패키지가 다른 패키지에서 기능을 가져올 수 있는 유사한 패키지 시스템이 있습니다.

타입스크립트:

var name string = "Go"
const maxItems int = 100
로그인 후 복사
로그인 후 복사

이동:

name := "Go" // type inference, like in TypeScript
로그인 후 복사

Go에서 패키지 메인은 애플리케이션의 진입점입니다. ES 모듈을 사용하는 TypeScript 프로젝트의 진입점 역할을 하는 메인 파일과 유사합니다.

7. Go의 동시성: 고루틴 ≒ 비동기 프로그래밍

async/await 및 promise를 사용한 JavaScript의 비동기 프로그래밍은 Go의 고루틴과 다소 유사하게 느껴집니다. 고루틴을 사용하면 기능을 동시에 실행할 수 있으므로 Go의 동시성 모델이 매우 강력해집니다.

자바스크립트:

interface Reader {
  read(): void;
}

class Book implements Reader {
  read() {
    console.log("Reading a book");
  }
}
로그인 후 복사

이동:

type Reader interface {
    Read()
}

type Book struct {
    Title string
}

func (b Book) Read() {
    fmt.Println("Reading", b.Title)
}
로그인 후 복사

Go의 고루틴을 사용하면 go 키워드와 동시에 기능을 시작할 수 있으며, TypeScript는 async/await 및 promise를 통해 이를 달성합니다.

결론

TypeScript/JavaScript에서 Go로 전환하는 것은 처음에는 어려워 보일 수 있지만 이러한 비교를 통해 전환을 더 원활하게 만드는 데 도움이 될 수 있습니다. Go의 더욱 엄격한 유형 시스템, 명시적인 인터페이스 및 동시성 모델을 이해하면 여행에 보람이 생길 것입니다. Go의 보다 명확하고 구조화된 특성에 익숙해지면 강력한 시스템 구축에 있어서 Go의 성능과 안정성을 높이 평가하게 될 것입니다.

위 내용은 TypeScript/JavaScript의 렌즈를 통해 이해하기의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

원천:dev.to
본 웹사이트의 성명
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.
저자별 최신 기사
인기 튜토리얼
더>
최신 다운로드
더>
웹 효과
웹사이트 소스 코드
웹사이트 자료
프론트엔드 템플릿
회사 소개 부인 성명 Sitemap
PHP 중국어 웹사이트:공공복지 온라인 PHP 교육,PHP 학습자의 빠른 성장을 도와주세요!