【问题标题】:How to use typescript in go如何在 go 中使用 typescript
【发布时间】:2020-08-25 16:39:30
【问题描述】:

我正在尝试创建一个使用 golang REST API 服务器的 Angular 应用程序。有一些业务逻辑是用前端使用的打字稿编写的。其中一些需要在后端使用。为了避免在 golang 中编写相同的逻辑,我想知道是否可以在 golang 中运行 typescript 代码?我发现 SWIG 可以在 golang 中运行 C++ 代码,但我没有找到任何打字稿。我知道我可以使用 webassembly 或其他工具在 Angular 中运行 golang 代码,但我不允许在 golang 中编写这些代码。

【问题讨论】:

  • 在 Go 中运行 TypeScript (JavaScript) 需要一个解释器。这些存在,但请注意,与仅在 Go 中编写相比,它可能会更慢、消耗更多内存并且更难使用。
  • 好的,我知道前端不是业务逻辑的最佳位置。但我不明白你的任务。如果将业务逻辑从浏览器移到服务器,我认为前端还有很多工作要做。
  • @Adrian 我知道用 Go 编写会更好。我们想做一些工作,比如在客户端和服务器中进行字段验证,逻辑基本相同。我希望避免代码重复,因为它更难维护。

标签: typescript go


【解决方案1】:

您可以在 AssemblyScript(TypeScript 的一个严格子集)中编写重复的逻辑,将其编译为 WebAssembly,然后使用类似 Wasmer 的运行时在 Go 中运行它。

请记住,尽管 AssemblyScript 仍在开发中。

【讨论】:

    【解决方案2】:

    您可以使用MetaCall,这是一个提供跨语言外来函数接口的库,我多年来一直在研究它。基本上,它允许您在不使用 WebAssembly 的情况下从 Go 调用 TypeScript 函数。调用在同一个过程中完成,因此您仍然可以获得良好的性能并使用标准 TypeScript 而不是语言的子集。

    TypeScript 支持仍在开发中,但您可以看到从 Go here 调用 TypeScript 函数的工作示例。

    通过这种方法,您可能可以创建一个公共存储库或 npm 包,将 TypeScript 逻辑作为库,然后将其同时导入前端和后端。

    您可以按照this instructions 安装MetaCall。安装完成后,您可以使用以下命令将 npm 包导入您的 Go 项目:

    metacall npm install your-package
    

    或者使用 git 将其添加为 sub-module

    稍后您可以像example 一样导入 TypeScript 库。您不需要转译它,MetaCall 会处理它。请记住在您的 Go 代码中使用 import MetaCall 并运行 go mod tidy

    提醒一下,示例手动编译 MetaCall,安装脚本下载预构建版本。

    【讨论】:

      猜你喜欢
      • 2010-12-15
      • 1970-01-01
      • 2011-08-18
      • 2018-01-15
      • 2015-10-12
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2019-06-27
      相关资源
      最近更新 更多