0

0

从 TypeScript/JavaScript 的角度理解

碧海醫心

碧海醫心

发布时间:2024-10-26 11:21:11

|

581人浏览过

|

来源于dev.to

转载

从 typescript/javascript 的角度理解

如果您有 typescript/javascript 背景并深入研究 go,那么在这两种语言之间进行比较可能会有助于加快您的学习速度。虽然它们在很多方面都有根本的不同(go 是一种静态类型的编译语言,而 typescript/javascript 是动态类型的、解释的或转译的语言),但有一些有用的类比将有助于使 go 更加直观。

1. go 中的结构体 ≈ typescript 中的类型

在 typescript 中,您定义类型和接口来描述对象的形状。类似地,go 有结构体,用于定义自定义类型。结构体可以包含不同类型的字段,类似于 typescript 类型或接口如何包含不同的属性。

打字稿:

PixVerse
PixVerse

PixVerse是一款强大的AI视频生成工具,可以轻松地将多种输入转化为令人惊叹的视频。

下载
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 不同,typescript 允许通过接口和类继承实现更动态的行为。

2. go 中的方法:接收者 ≈ javascript 中的原型

在 javascript 中,当您在对象的原型上定义方法时,它会与该对象的实例相关联。 go 使用与特定结构绑定的接收器函数类似的概念。这感觉类似于 javascript 中函数通过原型附加到对象的方式。

立即学习Java免费学习笔记(深入)”;

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 方法有一个接收器(b book),其作用类似于 javascript 中方法与原型的关联方式。它为您提供对象的实例(此处为 b),让您访问字段并使用方法。

3. typescript 中的 let、var、const ≈ go 中的变量声明

在 go 中声明变量的方式让人想起 javascript 的 let、var 和 const。在 go 中,变量用 var 声明,常量用 const 声明,很像 typescript。

打字稿:

let name: string = "typescript";
const maxitems: number = 100;

去:

var name string = "go"
const maxitems int = 100

go 中的 := 简写感觉有点像 javascript 的 let,它允许快速声明变量:

name := "go" // type inference, like in typescript

在 go 中,let 和 const 之间没有像 javascript 中那样的区别。默认情况下,go 中的所有变量在使用 var 声明时都是可变的,这意味着它们的值可以在以后更改。如果你想在 go 中使变量不可变,则必须显式使用 const 关键字。与 javascript 不同,在 go 中,你可以使用 let 来表示可变变量,也可以使用 const 来表示不可变变量,除非你将其声明为 const,否则一切都是可变的。

4. go 接口 ≈ typescript 接口(有差异)

typescript 接口定义对象的形状,而 go 接口定义行为(即对象必须具有的一组方法)。在 go 中,对象通过拥有所有必需的方法来隐式“实现”接口,这与 typescript 的显式实现形成对比。

打字稿:

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 中,任何实现 read 方法的类型都被认为实现了 reader 接口,即使没有显式声明它也是如此。

5. go 中的错误处理 ≈ javascript 中的 try-catch(但有所不同)

与 javascript 的 try-catch 相比,go 中的错误处理感觉非常不同。在 go 中,错误处理是通过返回值显式完成的,而 javascript 使用异常。

javascript:

try {
    // some code
} catch (error) {
    console.error(error);
}

去:

file, err := os.open("file.txt")
if err != nil {
    log.fatal(err)
}

在 go 中,错误是从函数返回的,需要显式检查,这会导致控制流更可预测,但与 javascript 的 try-catch 机制相比,需要更多的手动错误处理。

6. go 中的包系统 ≈ typescript 中的 es 模块

在 typescript 中,您将代码组织成可以导入/导出其他功能的模块。 go 有一个类似的包系统,其中每个文件都是包的一部分,并且包可以从其他包导入功能。

打字稿:

// module1.ts
export const greet = () => console.log("hello");

// module2.ts
import { greet } from "./module1";
greet();

去:

// main.go
package main

import "fmt"

func main() {
    fmt.println("hello, go")
}

在 go 中,包 main 是应用程序的入口点,类似于主文件作为使用 es 模块的 typescript 项目的入口点。

7. go 中的并发:goroutines ≈ 异步编程

javascript 使用 async/await 和 promise 的异步编程感觉有点类似于 go 的 goroutine。 goroutines 允许函数并发运行,使得 go 的并发模型非常强大。

javascript:

async function fetchdata() {
    const data = await fetch(url);
    console.log(data);
}

去:

func fetchData() {
    fmt.Println("Fetching data...")
}

go fetchData() // Runs concurrently

使用 go 的 goroutine,您可以使用 go 关键字同时启动函数,而 typescript 通过 async/await 和 promise 来实现这一点。

结论

从 typescript/javascript 切换到 go 起初可能看起来令人畏惧,但进行这些比较可以帮助使过渡更加顺利。了解 go 更严格的类型系统、显式接口和并发模型将使您的旅程受益匪浅。一旦掌握了 go 更明确和结构化的本质,您就会欣赏它在构建健壮系统方面的性能和可靠性。

热门AI工具

更多
DeepSeek
DeepSeek

幻方量化公司旗下的开源大模型平台

豆包大模型
豆包大模型

字节跳动自主研发的一系列大型语言模型

WorkBuddy
WorkBuddy

腾讯云推出的AI原生桌面智能体工作台

腾讯元宝
腾讯元宝

腾讯混元平台推出的AI助手

文心一言
文心一言

文心一言是百度开发的AI聊天机器人,通过对话可以生成各种形式的内容。

讯飞写作
讯飞写作

基于讯飞星火大模型的AI写作工具,可以快速生成新闻稿件、品宣文案、工作总结、心得体会等各种文文稿

即梦AI
即梦AI

一站式AI创作平台,免费AI图片和视频生成。

ChatGPT
ChatGPT

最最强大的AI聊天机器人程序,ChatGPT不单是聊天机器人,还能进行撰写邮件、视频脚本、文案、翻译、代码等任务。

相关专题

更多
TypeScript工程化开发与Vite构建优化实践
TypeScript工程化开发与Vite构建优化实践

本专题面向前端开发者,深入讲解 TypeScript 类型系统与大型项目结构设计方法,并结合 Vite 构建工具优化前端工程化流程。内容包括模块化设计、类型声明管理、代码分割、热更新原理以及构建性能调优。通过完整项目示例,帮助开发者提升代码可维护性与开发效率。

49

2026.02.13

TypeScript全栈项目架构与接口规范设计
TypeScript全栈项目架构与接口规范设计

本专题面向全栈开发者,系统讲解基于 TypeScript 构建前后端统一技术栈的工程化实践。内容涵盖项目分层设计、接口协议规范、类型共享机制、错误码体系设计、接口自动化生成与文档维护方案。通过完整项目示例,帮助开发者构建结构清晰、类型安全、易维护的现代全栈应用架构。

196

2026.02.25

TypeScript类型系统进阶与大型前端项目实践
TypeScript类型系统进阶与大型前端项目实践

本专题围绕 TypeScript 在大型前端项目中的应用展开,深入讲解类型系统设计与工程化开发方法。内容包括泛型与高级类型、类型推断机制、声明文件编写、模块化结构设计以及代码规范管理。通过真实项目案例分析,帮助开发者构建类型安全、结构清晰、易维护的前端工程体系,提高团队协作效率与代码质量。

48

2026.03.13

java基础知识汇总
java基础知识汇总

java基础知识有Java的历史和特点、Java的开发环境、Java的基本数据类型、变量和常量、运算符和表达式、控制语句、数组和字符串等等知识点。想要知道更多关于java基础知识的朋友,请阅读本专题下面的的有关文章,欢迎大家来php中文网学习。

1570

2023.10.24

c语言const用法
c语言const用法

const是关键字,可以用于声明常量、函数参数中的const修饰符、const修饰函数返回值、const修饰指针。详细介绍:1、声明常量,const关键字可用于声明常量,常量的值在程序运行期间不可修改,常量可以是基本数据类型,如整数、浮点数、字符等,也可是自定义的数据类型;2、函数参数中的const修饰符,const关键字可用于函数的参数中,表示该参数在函数内部不可修改等等。

564

2023.09.20

golang结构体相关大全
golang结构体相关大全

本专题整合了golang结构体相关大全,想了解更多内容,请阅读专题下面的文章。

490

2025.06.09

golang结构体方法
golang结构体方法

本专题整合了golang结构体相关内容,请阅读专题下面的文章了解更多。

202

2025.07.04

硬盘接口类型介绍
硬盘接口类型介绍

硬盘接口类型有IDE、SATA、SCSI、Fibre Channel、USB、eSATA、mSATA、PCIe等等。详细介绍:1、IDE接口是一种并行接口,主要用于连接硬盘和光驱等设备,它主要有两种类型:ATA和ATAPI,IDE接口已经逐渐被SATA接口;2、SATA接口是一种串行接口,相较于IDE接口,它具有更高的传输速度、更低的功耗和更小的体积;3、SCSI接口等等。

1961

2023.10.19

TypeScript类型系统进阶与大型前端项目实践
TypeScript类型系统进阶与大型前端项目实践

本专题围绕 TypeScript 在大型前端项目中的应用展开,深入讲解类型系统设计与工程化开发方法。内容包括泛型与高级类型、类型推断机制、声明文件编写、模块化结构设计以及代码规范管理。通过真实项目案例分析,帮助开发者构建类型安全、结构清晰、易维护的前端工程体系,提高团队协作效率与代码质量。

26

2026.03.13

热门下载

更多
网站特效
/
网站源码
/
网站素材
/
前端模板

精品课程

更多
相关推荐
/
热门推荐
/
最新课程
TypeScript 教程
TypeScript 教程

共19课时 | 3.4万人学习

TypeScript——十天技能课堂
TypeScript——十天技能课堂

共21课时 | 1.2万人学习

TypeScript-45分钟入门
TypeScript-45分钟入门

共6课时 | 0.5万人学习

关于我们 免责申明 举报中心 意见反馈 讲师合作 广告合作 最新更新
php中文网:公益在线php培训,帮助PHP学习者快速成长!
关注服务号 技术交流群
PHP中文网订阅号
每天精选资源文章推送

Copyright 2014-2026 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号