Heim >Backend-Entwicklung >Golang >Verstehen Gehen Sie durch die Linse von TypeScript/JavaScript

Verstehen Gehen Sie durch die Linse von TypeScript/JavaScript

DDD
DDDOriginal
2024-10-26 05:29:02794Durchsuche

Understanding Go through the Lens of TypeScript/JavaScript

Wenn Sie einen TypeScript-/JavaScript-Hintergrund haben und in Go eintauchen, kann es hilfreich sein, Parallelen zwischen den beiden Sprachen zu ziehen, um Ihr Lernen zu beschleunigen. Obwohl sie sich in vielerlei Hinsicht grundlegend unterscheiden (Go ist eine statisch typisierte, kompilierte Sprache und TypeScript/JavaScript eine dynamisch typisierte, interpretierte oder transpilierte Sprache), gibt es einige nützliche Analogien, die dazu beitragen, Go intuitiver zu machen.

1. Strukturen in Go ≈ Typen in TypeScript

In TypeScript definieren Sie Typen und Schnittstellen, um die Form von Objekten zu beschreiben. Ebenso verfügt Go über Strukturen, die zum Definieren benutzerdefinierter Typen verwendet werden. Eine Struktur kann Felder verschiedener Typen enthalten, ähnlich wie ein TypeScript-Typ oder eine TypeScript-Schnittstelle verschiedene Eigenschaften enthalten kann.

TypeScript:

type Book = {
  title: string;
  pages: number;
  read(): void;
}

Los:

type Book struct {
    Title string
    Pages int
}

func (b Book) Read() {
    fmt.Println("Reading", b.Title)
}

In beiden Fällen definieren Sie die Struktur eines Objekts. Allerdings sind die Strukturen von Go starrer und unterstützen keine Vererbung, im Gegensatz zu TypeScript, das ein dynamischeres Verhalten mit Schnittstellen und Klassenvererbung ermöglicht.

2. Methoden in Go: Empfänger ≈ Prototypen in JavaScript

Wenn Sie in JavaScript eine Methode für den Prototyp eines Objekts definieren, wird diese mit Instanzen dieses Objekts verknüpft. Go verwendet ein ähnliches Konzept mit Empfängerfunktionen, die an eine bestimmte Struktur gebunden sind. Dies ähnelt der Art und Weise, wie Funktionen in JavaScript über Prototypen an Objekte angehängt werden.

JavaScript:

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

Book.prototype.read = function() {
    console.log("Reading", this.title);
}

Los:

type Book struct {
    Title string
    Pages int
}

func (b Book) Read() {
    fmt.Println("Reading", b.Title)
}

In Go verfügt die Read-Methode über einen Empfänger (b Book), der sich ähnlich verhält wie Methoden mit Prototypen in JavaScript verknüpft werden. Sie erhalten die Instanz des Objekts (hier b), sodass Sie auf die Felder zugreifen und die Methode verwenden können.

3. let, var, const in TypeScript ≈ Variablendeklaration in Go

Die Art und Weise, wie Sie Variablen in Go deklarieren, erinnert an let, var und const in JavaScript. In Go werden Variablen mit var und Konstanten mit const deklariert, ähnlich wie TypeScript.

TypeScript:

let name: string = "TypeScript";
const maxItems: number = 100;

Los:

var name string = "Go"
const maxItems int = 100

Die Abkürzung := in Go ähnelt ein wenig der von JavaScript, da sie eine schnelle Variablendeklaration ermöglicht:

type Book = {
  title: string;
  pages: number;
  read(): void;
}

In Go gibt es keine Unterscheidung zwischen let und const wie in JavaScript. Standardmäßig sind alle Variablen in Go veränderbar, wenn sie mit var deklariert werden, was bedeutet, dass ihre Werte später geändert werden können. Wenn Sie eine Variable in Go unveränderlich machen möchten, müssen Sie explizit das Schlüsselwort const verwenden. Im Gegensatz zu JavaScript, wo Sie sowohl let für veränderliche Variablen als auch const für unveränderliche Variablen haben, ist in Go alles veränderbar, es sei denn, Sie deklarieren es als const.

4. Go Interfaces ≈ TypeScript Interfaces (mit Unterschieden)

TypeScript-Schnittstellen definieren die Form von Objekten, während Go-Schnittstellen das Verhalten definieren (d. h. eine Reihe von Methoden, die ein Objekt haben muss). In Go „implementiert“ ein Objekt eine Schnittstelle implizit, indem es über alle erforderlichen Methoden verfügt, was im Gegensatz zur expliziten Implementierung von TypeScript steht.

TypeScript:

type Book struct {
    Title string
    Pages int
}

func (b Book) Read() {
    fmt.Println("Reading", b.Title)
}

Los:

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

Book.prototype.read = function() {
    console.log("Reading", this.title);
}

In Go gilt jeder Typ, der die Read-Methode implementiert, als Implementierung der Reader-Schnittstelle, auch ohne diese explizit zu deklarieren.

5. Fehlerbehandlung in Go ≈ Try-Catch in JavaScript (aber anders)

Die Fehlerbehandlung in Go fühlt sich ganz anders an als bei JavaScripts Try-Catch. In Go erfolgt die Fehlerbehandlung explizit mit Rückgabewerten, während JavaScript Ausnahmen verwendet.

JavaScript:

type Book struct {
    Title string
    Pages int
}

func (b Book) Read() {
    fmt.Println("Reading", b.Title)
}

Los:

let name: string = "TypeScript";
const maxItems: number = 100;

In Go werden Fehler von Funktionen zurückgegeben und müssen explizit überprüft werden, was zu einem vorhersehbareren Kontrollfluss führt, aber im Vergleich zum Try-Catch-Mechanismus von JavaScript mehr manuelle Fehlerbehandlung erfordert.

6. Paketsystem in Go ≈ ES-Module in TypeScript

In TypeScript organisieren Sie Ihren Code in Modulen, die andere Funktionalitäten importieren/exportieren können. Go verfügt über ein ähnliches Paketsystem, bei dem jede Datei Teil eines Pakets ist und Pakete Funktionen aus anderen Paketen importieren können.

TypeScript:

var name string = "Go"
const maxItems int = 100

Los:

name := "Go" // type inference, like in TypeScript

In Go ist das Paket main der Einstiegspunkt Ihrer Anwendung, ähnlich wie eine Hauptdatei als Einstiegspunkt für ein TypeScript-Projekt mit ES-Modulen dienen könnte.

7. Parallelität in Go: Goroutinen ≈ Asynchrone Programmierung

Die asynchrone Programmierung von JavaScript mit async/await und Promises ähnelt in gewisser Weise den Goroutinen von Go. Goroutinen ermöglichen die gleichzeitige Ausführung von Funktionen, was das Parallelitätsmodell von Go sehr leistungsfähig macht.

JavaScript:

interface Reader {
  read(): void;
}

class Book implements Reader {
  read() {
    console.log("Reading a book");
  }
}

Los:

type Reader interface {
    Read()
}

type Book struct {
    Title string
}

func (b Book) Read() {
    fmt.Println("Reading", b.Title)
}

Mit den Goroutinen von Go können Sie Funktionen gleichzeitig mit dem Schlüsselwort go starten, während TypeScript dies durch async/await und Promises erreicht.

Abschluss

Der Wechsel von TypeScript/JavaScript zu Go mag zunächst entmutigend erscheinen, aber diese Vergleiche können dazu beitragen, den Übergang reibungsloser zu gestalten. Das Verständnis des strengeren Typsystems, der expliziten Schnittstellen und des Parallelitätsmodells von Go wird Ihre Reise lohnenswert machen. Sobald Sie den klareren und strukturierteren Charakter von Go kennengelernt haben, werden Sie seine Leistung und Zuverlässigkeit beim Aufbau robuster Systeme zu schätzen wissen.

Das obige ist der detaillierte Inhalt vonVerstehen Gehen Sie durch die Linse von TypeScript/JavaScript. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Stellungnahme:
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn