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 类型或接口如何包含不同的属性。

打字稿:

百家CMS微商城
百家CMS微商城

百家CMS微商城从诞生开始,就坚持着简单实用的原则,基于目前最流行的WEB2.0的架构(php+mysql),拥有成熟、稳定的微电商技术解决方案。基于完整的会员等级制度,完善的微商城购物流程,订单管理、优惠券、搜索、购物车等功能。采用跨平台机制,可同时对接微信公众号平台和支付宝服务窗,兼容微博、手机QQ等平台;丰富的支付方式、支持微信支付、支付宝支付、货到付款、余额支付、网银支付等。并且拥有完整的

下载
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

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

豆包大模型
豆包大模型

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

通义千问
通义千问

阿里巴巴推出的全能AI助手

腾讯元宝
腾讯元宝

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

文心一言
文心一言

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

讯飞写作
讯飞写作

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

即梦AI
即梦AI

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

ChatGPT
ChatGPT

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

相关专题

更多
js获取数组长度的方法
js获取数组长度的方法

在js中,可以利用array对象的length属性来获取数组长度,该属性可设置或返回数组中元素的数目,只需要使用“array.length”语句即可返回表示数组对象的元素个数的数值,也就是长度值。php中文网还提供JavaScript数组的相关下载、相关课程等内容,供大家免费下载使用。

559

2023.06.20

js刷新当前页面
js刷新当前页面

js刷新当前页面的方法:1、reload方法,该方法强迫浏览器刷新当前页面,语法为“location.reload([bForceGet]) ”;2、replace方法,该方法通过指定URL替换当前缓存在历史里(客户端)的项目,因此当使用replace方法之后,不能通过“前进”和“后退”来访问已经被替换的URL,语法为“location.replace(URL) ”。php中文网为大家带来了js刷新当前页面的相关知识、以及相关文章等内容

437

2023.07.04

js四舍五入
js四舍五入

js四舍五入的方法:1、tofixed方法,可把 Number 四舍五入为指定小数位数的数字;2、round() 方法,可把一个数字舍入为最接近的整数。php中文网为大家带来了js四舍五入的相关知识、以及相关文章等内容

776

2023.07.04

js删除节点的方法
js删除节点的方法

js删除节点的方法有:1、removeChild()方法,用于从父节点中移除指定的子节点,它需要两个参数,第一个参数是要删除的子节点,第二个参数是父节点;2、parentNode.removeChild()方法,可以直接通过父节点调用来删除子节点;3、remove()方法,可以直接删除节点,而无需指定父节点;4、innerHTML属性,用于删除节点的内容。

479

2023.09.01

JavaScript转义字符
JavaScript转义字符

JavaScript中的转义字符是反斜杠和引号,可以在字符串中表示特殊字符或改变字符的含义。本专题为大家提供转义字符相关的文章、下载、课程内容,供大家免费下载体验。

554

2023.09.04

js生成随机数的方法
js生成随机数的方法

js生成随机数的方法有:1、使用random函数生成0-1之间的随机数;2、使用random函数和特定范围来生成随机整数;3、使用random函数和round函数生成0-99之间的随机整数;4、使用random函数和其他函数生成更复杂的随机数;5、使用random函数和其他函数生成范围内的随机小数;6、使用random函数和其他函数生成范围内的随机整数或小数。

1091

2023.09.04

如何启用JavaScript
如何启用JavaScript

JavaScript启用方法有内联脚本、内部脚本、外部脚本和异步加载。详细介绍:1、内联脚本是将JavaScript代码直接嵌入到HTML标签中;2、内部脚本是将JavaScript代码放置在HTML文件的`<script>`标签中;3、外部脚本是将JavaScript代码放置在一个独立的文件;4、外部脚本是将JavaScript代码放置在一个独立的文件。

659

2023.09.12

Js中Symbol类详解
Js中Symbol类详解

javascript中的Symbol数据类型是一种基本数据类型,用于表示独一无二的值。Symbol的特点:1、独一无二,每个Symbol值都是唯一的,不会与其他任何值相等;2、不可变性,Symbol值一旦创建,就不能修改或者重新赋值;3、隐藏性,Symbol值不会被隐式转换为其他类型;4、无法枚举,Symbol值作为对象的属性名时,默认是不可枚举的。

554

2023.09.20

edge浏览器怎样设置主页 edge浏览器自定义设置教程
edge浏览器怎样设置主页 edge浏览器自定义设置教程

在Edge浏览器中设置主页,请依次点击右上角“...”图标 > 设置 > 开始、主页和新建标签页。在“Microsoft Edge 启动时”选择“打开以下页面”,点击“添加新页面”并输入网址。若要使用主页按钮,需在“外观”设置中开启“显示主页按钮”并设定网址。

0

2026.01.26

热门下载

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

精品课程

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

共19课时 | 2.4万人学习

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

共21课时 | 1.1万人学习

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号