百度360必应搜狗淘宝本站头条
当前位置:网站首页 > 技术教程 > 正文

每日一库之 Go 语言开发者的神器—Gotx

csdh11 2025-04-01 16:56 26 浏览

点击上方蓝色“Go语言中文网”关注我们,领全套Go资料,每天学习 Go 语言

简介

Gotx是一个Go语言(Golang)的解释器和运行环境,只有单个可执行文件,绿色、跨平台,无需安装任何Go语言环境就可以直接运行Go语言代码,支持绝大多数Go语言标准库,以及一些有用的第三方包/库,可以进行图形界面(GUI)编程,自带代码编辑器和REPL命令行交互式运行环境,支持代码脚本加密,堪称Go语言开发者的神器。Gotx适合的使用场景主要是:

  • 调试一些Go语言代码,尤其是在服务器上不方便经常编译的时候;最后当真正发布时,再安装Go语言环境进行编译以便获得较高的性能;
  • 作为一门独立的解释执行的脚本语言,而又完全支持Go语言的语法和函数库,这也是非常激动人心的;

Gotx基于yaegi这个非常优秀的Go语言解释器,在此基础上提供了更为丰富的运行环境支持和内置的第三方包。Gotx同时也提供一个纯命令行版本Gotxc。

Gotx的安装非常简单,只需要到其下载页面下载对应操作系统的压缩包,解压后仅一个可执行文件,放入合适的文件夹(目录)中即可,最好放到系统的PATH环境变量中,这样可以更方便地执行。Gotx的下载页面在这里,Github主页面在这里。

下面举例说明Gotx的特性用法。

交互式运行环境REPL

直接运行gotx程序不带任何参数即进入交互式运行环境REPL,可以尝试像脚本一样运行Go语言的代码,对Go语言编译运行惯了的开发者来说,应该是非常高兴的。

C:\Users\Administrator>gotx
> import "math/rand"
0xc0001926a0
> println(rand.Int())
9119787617706712871
> printf("1.6 * 3.8 = %v\n", 1.6 * 3.8)
1:28: undefined: printf
> import("tk")
0xc000192d00
> tk.Pl("1.6 * 3.8 = %v", 1.6 * 3.8)
1.6 * 3.8 = 6.08

> import "fmt"
0xc000193160
> fmt.Printf("1.6 * 3.8 = %v\n", 1.6 * 3.8)
1.6 * 3.8 = 6.08
17
>

可以看出,我们可以随时导入Go语言的标准包或第三方包,并使用Go语言完全相同的语法来进行类似Python这种解释执行的脚本语言式的即时编程与调试。虽然解释执行相对速度较慢,但在非特别需要大量高速计算的情况下已经足够,并且无需像Go语言那样每次修改哪怕一行代码也要重新编译执行,真正需要高效率的时候,可以在代码调试基本没问题后再拿到Go语言环境中编译即可。

使用quit()函数或exit(1)函数来退出Goxt的REPL环境,直接Ctrl-C也可以。

直接运行Go语言代码文件

Gotx也可以直接运行Go语言的代码文件,这也是Gotx最常使用的方式,大多数情况下,会被直接拿来执行一个“.go”为后缀的Go语言的文件,也可以执行以“.gt”结尾的Gotx自身的代码文件,这两种文件有可能稍有不同,因为Gotx内置了一些函数,例如printfln等,也有一些微小的差异,例如简化了一些常用第三方库的导入包明,但不使用这些特性的话,大多数情况下这两种代码文件是一样的。

C:\Users\Administrator>type d:\goprjs\src\github.com\topxeq\gotx\scripts\basic.gt
package main
import (
        "math/rand"
        "tk"
)
func main() {
        tk.Pl("1.2 * 3.8 = %v", 1.2*3.8)
        printfln("random number: %v", rand.Int())
}
C:\Users\Administrator>gotx d:\goprjs\src\github.com\topxeq\gotx\scripts\basic.gt
1.2 * 3.8 = 4.56
random number: 2622618270577455181
C:\Users\Administrator>

本例中执行了一个basic.gt代码文件,可以看出,这段代码与Go语言代码基本完全一致,仅有两处微小区别,一是对于第三份包github.com/topxeq/tk使用了短路径tk来进行导入,另外使用了内置函数printfln(相当于printf函数多输出了一个回车换行符),如果为了完全与Go语言兼容,可以按适当的方法写即可,例如包导入可以写作 "github.com/topxeq/tk",printfln这一句可以写作printf("random number: %v\n", rand.Int())即可,就是稍稍麻烦一些而已。

使用Goxt内置的代码编辑器

直接输入

gotx -edit

即可启动一个Gotx内置的代码编辑器进行代码编写,也可以后带文件名编辑一个已有的代码文件,例如,

gotx -edit basic.gt

效果如下所示:

Gotx代码编辑器

直接运行Gotx云端Gitee库中的例子代码

gotx -example basic.gt

直接运行Gotx云端Gitee库中的例子代码.

查看Gotx云端Gitee库中的例子代码

gotx -example -view basic

可以省略最后的文件扩展名。另外,-view参数也可以用于查看其他方式读入的代码,例如从文件中的。

C:\Users\Administrator>gotx -example -view basic
package main
import (
        "math/rand"
        "tk"
)
func main() {
        tk.Pl("1.2 * 3.8 = %v", 1.2*3.8)
        printfln("random number: %v", rand.Int())
}

也可以用这种方法加重定向将代码保存,例如,

gotx -example -view basic > d:\scripts\a.gt

直接远程执行Gotx代码

gox -remote https://yourdomain.com/basica.gt

Gotx将从指定的网址下载该代码并执行,这种方式比较方便远程调试。

加密源代码文件Encrypt source code file

gotx -encrypt=mycode basic.gt

加密的文件将在扩展名中加上一个字母e。注意将mycode换为自己所需的加密密码,并不要忘记,否则无法取回。

解密代码文件

gotx -decrypt=mycode basic.gte

直接解密执行加密后的代码文件

gotx -decrun=mycode basic.gte

或远程网络的也可以

gotx -decrun=mycode -example basic.gte

使用Gotx进行图形界面编程

Gotx中内置了第三方包Giu,可以编写一般的图形界面程序,需要系统支持OpenGL。

package main
import (
    "os"
    "github.com/AllenDang/giu"
)
var text1 string
func onButton1Click() {
    // evaluate the expression in the text input
    t := text1
    rs := eval(t)
    println(rs)
    // set the result back into the text input
    text1 = rs //string(rs)
}
// close the window, also terminate the application
func onButton2Click() {
    os.Exit(1)
}
// main window loop
func loop() {
    // set the layout of GUI
    layoutT := []giu.Widget{
        giu.Label("Enter an expression."),
        giu.InputText("", 0, &text1),
        // widgets in line layout is aligned left to right
        giu.Line(giu.Button("Calculate", onButton1Click),
            giu.Button("Close", onButton2Click)),
    }
    giu.SingleWindow("Calculator", layoutT)
}
func main() {
    // text1 used to hold the string value of the text input
    // notice: text1 is a pointer
    // setup the title, size (width and height, 400*200), style and font-loading function of main window,
    mainWindow := giu.NewMasterWindow("Calculator", 400, 200, giu.MasterWindowFlagsNotResizable, nil)
    // show the window and start the message loop
    giu.LoopWindow(mainWindow, loop)
}

执行效果:

进行计算

十几行程序就实现了一个图形界面的计算器。

使用Gotx的命令行版本Gotxc

有些电脑环境不支持图形界面,例如租用的云端服务器,此时可以使用Gotx的命令行版本Gotxc,除了与图形界面有关的功能,其他功能都可以使用,也是非常方便的。

相关推荐

NUS邵林团队发布DexSinGrasp基于强化学习实现物体分离与抓取统一

本文的作者均来自新加坡国立大学LinSLab。本文的共同第一作者为新加坡国立大学实习生许立昕和博士生刘子轩,主要研究方向为机器人学习和灵巧操纵,其余作者分别为硕士生桂哲玮、实习生郭京翔、江泽宇以及...

「PLC进阶」如何通过编写SCL语言程序实现物料分拣?

01、前言SCL作为IEC61131-3编程语言的一种,由于其高级语言的特性,特别适合复杂运算、复杂数学函数应用的场合。本文以FactoryIO软件中的物料分拣案例作为硬件基础,介绍如何通过SCL来实...

zk源码—5.请求的处理过程一(http1.1请求方法)

大纲1.服务器的请求处理链...

自己动手从0开始实现一个分布式 RPC 框架

前言为什么要自己写一个RPC框架,我觉得从个人成长上说,如果一个程序员能清楚的了解RPC框架所具备的要素,掌握RPC框架中涉及的服务注册发现、负载均衡、序列化协议、RPC通信协议、Socket通信、异...

MLSys’25 | 极低内存消耗:用SGD的内存成本实现AdamW的优化性能

AIxiv专栏是机器之心发布学术、技术内容的栏目。过去数年,机器之心AIxiv专栏接收报道了2000多篇内容,覆盖全球各大高校与企业的顶级实验室,有效促进了学术交流与传播。如果您有优秀的工作想要分享,...

线程池误用导致系统假死(线程池会自动销毁吗)

背景介绍在项目中,为了提高系统性能使用了RxJava实现异步方案,其中异步线程池是自建的。但是当QPS稍微增大之后却发现系统假死、无响应和返回,调用方出现大量超时现象。但是通过监控发现,系统线程数正常...

大型乘用车工厂布局规划(六大乘用车基地)

乘用车工厂的布局规划直接影响生产效率、物流成本、安全性和未来扩展能力。合理的布局应确保生产流程顺畅、物流高效、资源优化,并符合现代化智能制造和绿色工厂的要求。以下是详细的工厂布局规划要点:1.工厂布...

西门子 S7-200 SMART PLC 连接Factory IO的方法

有很多同学不清楚如何西门子200smart如何连接FactoryIO,本教程为您提供了如何使用西门子S7-200SMARTPLC连接FactoryIO的说明。设置PC和PLC之间的...

西门子博图高级仿真软件的应用(西门子博途软件仿真)

1.博图高级仿真软件(S7-PLCSIMAdvancedV2.0)S7-PLCSIMAdvancedV2.0包含大量仿真功能,通过创建虚拟控制器对S7-1500和ET200SP控制器进行仿真...

PLC编程必踩的6大坑——请对号入座,评论区见

一、缺乏整体规划:面条式代码问题实例:某快递分拣线项目初期未做流程图设计,工程师直接开始编写传送带控制程序。后期增加质检模块时发现I/O地址冲突,电机启停逻辑与传感器信号出现3处死循环,导致项目延期2...

统信UOS无需开发者模式安装软件包
统信UOS无需开发者模式安装软件包

原文链接:统信UOS无需开发者模式安装软件包...

2025-05-05 14:55 csdh11

100个Java工具类之76:数据指纹DigestUtils

为了提高数据安全性,保证数据的完整性和真实性,DigestUtils应运而生。正确恰当地使用DigestUtils的加密算法,可以实现数据的脱敏,防止数据泄露或篡改。...

麒麟KYLINIOS软件仓库搭建02-软件仓库添加新的软件包

#秋日生活打卡季#原文链接:...

Java常用工具类技术文档(java中工具类的作用)

一、概述Java工具类(UtilityClasses)是封装了通用功能的静态方法集合,能够简化代码、提高开发效率。本文整理Java原生及常用第三方库(如ApacheCommons、GoogleG...

软路由的用法(自动追剧配置)(软路由教学)

本内容来源于@什么值得买APP,观点仅代表作者本人|作者:值友98958248861环境和需求...