首页/新闻资讯/正文详情

判题机(go-judge)环境搭建与实现

发布时间:2026/9/25 11:48:38 来源:云帆数科 栏目:资讯中心
判题机(go-judge)环境搭建与实现
本文讲述了go-judge的编译、实现过程和基本原理,搭建了基本的测评流程,包括读取本地测试样例,进行测评与测评结果的反馈。其中的打包的镜像、源代码都在文末加了下载链接。1.前言1.1 实现结果先看实现的结果:实现了(1)代码编译 (2)文件读取 (3)判题机输出 (4)输出对比1.2 go-judge简介go-judge 是一个用 Go 语言编写的高性能代码执行沙箱服务,专为在线评测系统(OJ)设计。它利用 Linux 内核的 cgroup 和 namespace 技术,安全隔离并运行用户提交的 C++、Python、Java 等多语言代码。go-judge 提供 RESTful API,支持编译、运行、文件缓存和资源限制,可通过 HTTP 或 WebSocket 调用。它既支持直接部署为二进制服务,也可作为 Docker 容器运行,是构建现代判题系统的核心组件。1.3 官网资源(1)官方源代码:https://github.com/criyle/go-judge上面的如果打不开,可以从下面链接下载:go-judge-master.zip链接:百度网盘:通过网盘分享的文件:go-judge-master.zip链接: https://pan.baidu.com/s/1A-9HFtA6AbgDojAcyxHwbA?pwd=bxh3 提取码: bxh3夸克网盘:我用夸克网盘给你分享了「go-judge-master.zip」,点击链接或复制整段内容,打开「夸克APP」即可获取。/0c8e3b4ft9😕链接:https://pan.quark.cn/s/04455d03d86f?pwd=cFcz提取码:cFcz(2)官方的中文文档:https://github.com/criyle/go-judge/blob/master/README.cn.md(3)go-judge文档:https://docs.goj.ac/cn/非常建议自己阅读几遍。(4)go-sandbox官网:https://github.com/criyle/go-sandboxgo-judge 是基于底层库 go-sandbox 构建的上层服务,go-sandbox 提供核心的 Linux 系统隔离能力,而 go-judge 将其封装成可直接调用的网络 API 服务。(5)go-judge-demo(官方基于go-judge实现的demo)https://github.com/criyle/go-judger-demo1.4 版本windows10go-judge:1.12.0docker:29.5.3node:22.19.02.实现原理首先将源代码,按照规定格式,送入go-judge,go-judge会返回一个fileId按照官方给的格式,fileId+题目的输入数据 再传入go-judge,go-judge会返回数据,这个数据包含标准输出(stdout)或(stderr)当拿到go-judge对于当前的 测试输入 的标准输出后,拿着这个结果和 测试输出 做比对,如果一致就认为是对的3.go-judge部署与实现这一小节的目的是让go-judge跑起来,实际选用的Docker方式3.1 服务器部署官方给了可执行文件可以按照你服务器的环境进行下载和编译。文件名适用环境说明go-judge-init_1.12.0_linux_38632 位 x86 架构(老旧 Intel/AMD 32 位 CPU)已逐渐淘汰,一般不建议使用go-judge-init_1.12.0_linux_amd64v264 位 x86_64 架构,支持 v2 指令集绝大多数现代 64 位 x86 服务器/PC 适用(兼容性最好,推荐首选)go-judge-init_1.12.0_linux_amd64v364 位 x86_64,支持 v3 指令集(约 2013 年后的 CPU)性能略优,但需要较新 CPU(如 Intel Haswell 及以上),兼容性稍窄go-judge-init_1.12.0_linux_arm6464 位 ARM 架构(如 AWS Graviton、Apple M 系列、树莓派 4 等)适用于 ARM 云服务器或嵌入式设备go-judge-init_1.12.0_linux_armv532 位 ARM 架构(旧版树莓派等)老旧 ARM 设备,较少使用go-judge-init_1.12.0_linux_armv732 位 ARM 架构(旧版树莓派等)老旧 ARM 设备,较少使用go-judge-init_1.12.0_linux_loong64龙芯(LoongArch)64 位架构国产龙芯 CPU 专用go-judge-init_1.12.0_linux_mips64le_hardfloatMIPS 64 位小端,硬浮点某些嵌入式或专用设备go-judge-init_1.12.0_linux_ppc64lePowerPC 64 位小端IBM POWER 系列服务器Source code (zip)/(tar.gz)源代码(不限平台)用于自行编译,不直接运行如果想要编译,还需要在服务器上装上一些语言的编译器等。本文主要演示Docker方式,后续会出文章详细解释服务器部署方式。3.2 Docker部署电脑要先安装Docker环境,这里又有三种情况。(1)虚拟机 (2)windows+wls2(ubuntu) (3)windows+docker desktop本文选用的是(3),因为没装虚拟机,第二种情况测试了很多时间,要不就是403,要不就是下载不下来,最终选了第3种。记住目的,我们只是需要docker安装go-judge而已,上面的方式都可以。官方推荐官方说可以使用下面的命令直接运行:dockerrun-it--privileged--shm-size=256m-p5050:5050 criyle/go-judge在windows环境下,试了很多次,还是不行,而且还需要增加编译器,所以更推荐自己构建Docker镜像。3.3 制作Docker镜像本文使用的windows desktop 4.78。官方下载地址:https://docs.docker.com/desktop/setup/install/windows-install/上面的如果打不开,或者下载不了,可以使用下面的备用链接:Docker Desktop Installer.exe链接:百度网盘:通过网盘分享的文件:Docker Desktop Installer.exe链接: https://pan.baidu.com/s/1YsAY-eiJCDCsJv4VN8PcMw?pwd=7grc 提取码: 7grc夸克网盘:我用夸克网盘给你分享了「Docker Desktop Installer.exe」,点击链接或复制整段内容,打开「夸克APP」即可获取。/649a3b4gsz😕链接:https://pan.quark.cn/s/486515d87f08?pwd=wLLH提取码:wLLH下载完后,安装。需要注意的是(1)开启 WSL2(推荐,Docker 默认后端)或 Hyper-V(2)安装时勾选 Add shortcut to desktop + 自动配置环境变量(默认勾选)安装完后,按win+R,后输入cmd,然后在cmd中输入docker -v然后,下载go-judge源代码。如果上面的打不开,可以使用备用链接:go-judge-1.12.0.zip链接:百度网盘:通过网盘分享的文件:go-judge-1.12.0.zip链接: https://pan.baidu.com/s/1A48NcXBbv4cA_gv3X4NzFQ?pwd=8gxh 提取码: 8gxh2.夸克网盘:我用夸克网盘给你分享了「go-judge-1.12.0.zip」,点击链接或复制整段内容,打开「夸克APP」即可获取。/47113b4hGw😕链接:https://pan.quark.cn/s/72994dd81f3d?pwd=SeKg提取码:SeKg下载后,解压。准备构建go-judge镜像。直接构建失败率挺高的,所以建议先安装go-lang和ubuntu (也可以安装debian,官方用的debian示例),再构建。按win+R,输入cmd,然后dockerpull golang:1.25等待它安装完,注意版本要适配,不然构建可能会报错这个过程根据网络情况可能会长短不一。然后安装ubuntudockerpull ubuntu:22.04编写DockerFile,把下面的内容复制,然后另存为DockerFile (注意,没有文件类型)# 编译阶段FROM golang:1.25 AS builder WORKDIR /build COPY..ENVGOPROXY=https://goproxy.cn,direct RUN go mod downloadCGO_ENABLED=0go build-ogo-judge ./cmd/go-judge# 运行阶段(只安装 C++ 编译器)FROM ubuntu:22.04 RUNsed-i's/archive.ubuntu.com/mirrors.aliyun.com/g'/etc/apt/sources.list\apt-getupdateapt-get

相关推荐

lego 使用 West.cn/西部数码 进行 DNS-01 挑战:完整配置指南与源码剖析
lego 使用 West.cn/西部数码 进行 DNS-01 挑战:完整配置指南与源码剖析

网络安全密码学 【免费下载链接】lego Lets Encrypt/ACME client and library written in Go 项目地址: https://gitcode.com/gh_mirrors/le/lego 点击查看 免费下载 West.cn(西部数码)是国内常用的域名注册与 DNS 托管服务商,其… · 2026/9/25 11:48:38

AI应用开发内容缺失导致无法生成合规技术博文
AI应用开发内容缺失导致无法生成合规技术博文

我无法根据当前输入生成符合要求的博文。原因如下:项目正文为空:全文未提供任何实质性描述,缺乏技术细节、应用场景、具体问题或实践过程等核心素材;关键词缺失:无明确领域指向(如“AI绘画”“大模型微调”… · 2026/9/25 11:48:38

从MATH跑分看Gemini3.5与GPT5.5的硬核推理范式变革:TaoToken统一Key下双模型配置与验证
从MATH跑分看Gemini3.5与GPT5.5的硬核推理范式变革:TaoToken统一Key下双模型配置与验证

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views … · 2026/9/25 11:48:32

桌面通讯型CRM如何打通销售数据闭环?从选型到落地的实践指南
桌面通讯型CRM如何打通销售数据闭环?从选型到落地的实践指南

1. 我为什么会在十几套CRM里选中 DeskcommCRM1.1 起因:销售数据断成两截,我彻底受够了先说说我自己的情况。我所在的是一个十几人的销售型小团队,主要靠电话外呼和在线沟通开发客户。在没换系统之前,我们的日常工作流程大概是这样… · 2026/9/25 14:26:32

ESP32 WiFi感知实战:无传感器人体检测的RSSI与CSI原理
ESP32 WiFi感知实战:无传感器人体检测的RSSI与CSI原理

开头我先交代一下背景:这段时间我一直在玩ESP32,本来只是做点温湿度采集、开关控制这类常规项目。直到我看到一个方向,让我当场决定停下手头的活,花了一整个周末去验证——让一块不带任何传感器的ESP32开发板,只靠WiFi… · 2026/9/25 14:26:07

银行卡BIN数据从Excel到MySQL导入与查询实践
银行卡BIN数据从Excel到MySQL导入与查询实践

简介:银联官方2020年4月25日发布的银行卡BIN数据,共收录9868条记录,面向支付系统开发、金融风控、商户对接及数据分析人员,可快速完成银行卡发卡行识别与卡类型判断,适用于卡Bin校验、交易路由和用户画像等场景。资源包… · 2026/9/25 14:26:07

Simple Live:一个App免费看全四大直播的跨平台直播聚合完整指南
Simple Live:一个App免费看全四大直播的跨平台直播聚合完整指南

Simple Live:一个App免费看全四大直播的跨平台直播聚合完整指南 【免费下载链接】dart_simple_live 简简单单的看直播 项目地址: https://gitcode.com/GitHub_Trending/da/dart_simple_live 只想看一场直播,难道得挨个打开四个App?Sim… · 2026/9/25 14:26:01

Windows 11开始菜单自定义全指南:从设置到第三方工具
Windows 11开始菜单自定义全指南:从设置到第三方工具

用过Windows 11一段时间的朋友,大概率都会对开始菜单有些复杂情绪。它和Windows 10那个磁贴满屏的时代彻底说了再见,默认状态下的"固定"和"推荐"两个区域,既没有旧版那种一眼看到一堆应用的直接,又不像 macOS… · 2026/9/25 14:26:01

OpenClaw 实操指南 34|从标题到正文的写稿提示词工程实战:用 TaoToken 统一 Key 打通 System Prompt 与 Few-Shot 配置
OpenClaw 实操指南 34|从标题到正文的写稿提示词工程实战:用 TaoToken 统一 Key 打通 System Prompt 与 Few-Shot 配置

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views … · 2026/9/25 14:25:36

数值优化(Numerical Optimization)学习系列-03-共轭梯度方法(Conjugate Gradient)
数值优化(Numerical Optimization)学习系列-03-共轭梯度方法(Conjugate Gradient)

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views … · 2026/9/25 1:00:31

创维E900V22D刷机全攻略:S905L3SB芯片兼容性解析与救砖实战
创维E900V22D刷机全攻略:S905L3SB芯片兼容性解析与救砖实战

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views … · 2026/9/25 1:00:31

MQTT协议原理与Broker服务器搭建实战:从Mosquitto到EMQX
MQTT协议原理与Broker服务器搭建实战:从Mosquitto到EMQX

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views … · 2026/9/25 1:00:37

了解更多?预约专属演示

我们的顾问将为您一对一讲解产品与方案

企业微信二维码