新闻详情

新闻详情

首页 / 资讯中心 / 详情

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

发布时间:2026/9/28 21:27:32来源:尧图网络
判题机(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
网站建设高端定制企业官网
RELATED

相关资讯

更多精彩内容,欢迎继续阅读

较早相关资讯

最新相关资讯

Ars Contexta 自我进化指南:观察-张力双循环如何让你的第二大脑持续成长 2026/9/28 21:27:13

Ars Contexta 自我进化指南:观察-张力双循环如何让你的第二大脑持续成长

Ars Contexta 自我进化指南:观察-张力双循环如何让你的第二大脑持续成长 【免费下载链接】arscontexta Claude Code plugin that generates individualized knowledge systems from conversation. You describe how you think and work, have a conversation and ge…

阅读更多 →
Humanizer 日期人性化资源键机制解析:ResourceKeys.DateHumanize 类深入指南 2026/9/28 21:27:13

Humanizer 日期人性化资源键机制解析:ResourceKeys.DateHumanize 类深入指南

开发工具 【免费下载链接】Humanizer Humanizer meets all your .NET needs for manipulating and displaying strings, enums, dates, times, timespans, numbers and quantities 项目地址: https://gitcode.com/gh_mirrors/hu/Humanizer 点击查看 免费下载 导读 …

阅读更多 →
方法章与实验设计也要双版本烟测:三列表 + A/B 验收表 2026/9/28 21:27:06

方法章与实验设计也要双版本烟测:三列表 + A/B 验收表

千笔-AIWritePaper https://www.aiwritepaper.com 方法章最常见的假完成是写得像方法:「本研究采用实验法,将学生随机分为实验组和对照组,通过前后测比较干预效果,使用 SPSS 进行显著性检验。」每个词都对,答辩时却经…

阅读更多 →
Vivi-Music如何实现应用内OTA更新?updater设计、changelog渲染与版本演进详解 2026/9/28 21:27:06

Vivi-Music如何实现应用内OTA更新?updater设计、changelog渲染与版本演进详解

Vivi-Music如何实现应用内OTA更新?updater设计、changelog渲染与版本演进详解 【免费下载链接】vivi-music Vivi-Music is an expressive Material 3–based YouTube Music client for Android. 项目地址: https://gitcode.com/gh_mirrors/vi/vivi-music Viv…

阅读更多 →
脑电之波:从离子流动到头皮电位的毫秒之旅 2026/9/28 21:27:06

脑电之波:从离子流动到头皮电位的毫秒之旅

脑电(EEG,Electroencephalography)是在头皮表面记录到的大脑神经活动产生的电信号。它不是大脑“发出的电波”,而是大量神经元同步活动时,细胞外离子流动在容积导体中形成的电位差,经过脑组织、脑脊液、颅骨…

阅读更多 →
HarmonyOS 7 精准碰一碰:发送文件选谁,接收文件插哪?两个决策别混在一起 2026/9/28 21:27:06

HarmonyOS 7 精准碰一碰:发送文件选谁,接收文件插哪?两个决策别混在一起

HarmonyOS 7 精准碰一碰:发送文件选谁,接收文件插哪?两个决策别混在一起 电脑里已经选中了两张照片,手机却碰到了第三张,应该分享哪几张?另一边,手机把图片传给电脑,文件还没到&…

阅读更多 →

今日资讯

本周资讯

本月资讯

看完文章仍有疑问?

联系尧图顾问,获取一对一建站咨询

立即免费咨询 📞 400-888-8888
📞 ✉